国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ESP32 HTTPS客戶端POST請(qǐng)求(跳過(guò)證書驗(yàn)證)

這篇具有很好參考價(jià)值的文章主要介紹了ESP32 HTTPS客戶端POST請(qǐng)求(跳過(guò)證書驗(yàn)證)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

ESP32-ESP-IDF-HTTPS客戶端

本文例程為ESP32 HTTPS客戶端POST請(qǐng)求
只有HTTPS請(qǐng)求部分,聯(lián)網(wǎng)部分省略默。。。

參考文檔

樂(lè)鑫ESP-IDF API參考文檔

所用API

函數(shù) esp_http_client_init

//啟動(dòng)HTTP鏈接必須先調(diào)用此函數(shù),返回值為為一個(gè)結(jié)構(gòu)體對(duì)象,也是其它接口的必要參數(shù)
//失敗返回NULL
//函數(shù)參數(shù)為constesp_http_client_config_t結(jié)構(gòu)體指針(此結(jié)構(gòu)體用于配置HTTP/HTTPS相關(guān)參數(shù))
esp_http_client_handle_t esp_http_client_init(constesp_http_client_config_t *config)

結(jié)構(gòu)體 constesp_http_client_config_t

此結(jié)構(gòu)體用于配置HTTP/HTTPS參數(shù)

// 結(jié)構(gòu)體成員如下
typedef struct {
    const char                  *url;//HTTP/HTTPS的url地址
    const char                  *host;//域名或ip(此項(xiàng)可不填)
    int                         port;//請(qǐng)求的端口80或443(默認(rèn)此項(xiàng)可不填)
    const char                  *username;//用戶名用于HTTP身份驗(yàn)證(不用不填)
    const char                  *password;//密碼用于HTTP身份驗(yàn)證(不用不填)
    esp_http_client_auth_type_t auth_type;//HTTP身份驗(yàn)證類型默認(rèn)為HTTP_AUTH_TYPE_NONE即無(wú)身份驗(yàn)證(默認(rèn)即可)
    const char                  *path;//HTTP路徑默認(rèn)為/(客戶端無(wú)需此項(xiàng))
    const char                  *query;//HTTP查詢
    const char                  *cert_pem;//服務(wù)器SSL證書(作為HTTPS服務(wù)器時(shí))
    size_t                      cert_len;//證書長(zhǎng)度
    const char                  *client_cert_pem;//客戶端SSL證書(作為客戶端,服務(wù)器需要驗(yàn)證證書時(shí))
    size_t                      client_cert_len;//證書長(zhǎng)度
    const char                  *client_key_pem;//客戶端證書密鑰
    size_t                      client_key_len;//密鑰長(zhǎng)度
    const char                  *client_key_password;//密鑰密碼
    size_t                      client_key_password_len;//密碼長(zhǎng)度
    const char                  *user_agent;//要與 HTTP 請(qǐng)求一起發(fā)送的用戶代理字符串
    esp_http_client_method_t    method;//請(qǐng)求模式默認(rèn)為HTTP_METHOD_GET即GET方法可根據(jù)需要進(jìn)行修改,也可以默認(rèn)不填請(qǐng)求時(shí)直接調(diào)用接口
    int                         timeout_ms;//網(wǎng)絡(luò)超時(shí)時(shí)間
    bool                        disable_auto_redirect;//禁用HTTP自動(dòng)重定向
    int                         max_redirection_count;//最大重定向數(shù),如果為零,則使用默認(rèn)值
    int                         max_authorization_retries;//接收 HTTP 未授權(quán)狀態(tài)代碼時(shí)的最大連接重試次數(shù),如果為零,則使用默認(rèn)值。如果 -1 則禁用授權(quán)重試
    http_event_handle_cb        event_handler;//HTTP事件回調(diào)函數(shù)(重要)
    esp_http_client_transport_t transport_type;//HTTP傳輸類型使用HTTP時(shí)填HTTP_TRANSPORT_OVER_TCP,使用HTTPS時(shí)填HTTP_TRANSPORT_OVER_SSL
    int                         buffer_size;//HTTP接收緩沖區(qū)大小(一般默認(rèn)即可)
    int                         buffer_size_tx;//HTTP傳輸緩沖區(qū)大小
    void                        *user_data;//HTTP user_data上下文
    bool                        is_async;//設(shè)置異步模式,目前僅支持 HTTPS
    bool                        use_global_ca_store;//
    bool                        skip_cert_common_name_check;//跳過(guò)服務(wù)器證書 CN 字段的任何驗(yàn)證(注意此處有坑)
    esp_err_t (*crt_bundle_attach)(void *conf);//指向esp_crt_bundle_attach的函數(shù)指針。允許使用證書捆綁包進(jìn)行服務(wù)器驗(yàn)證,必須在menuconfig中啟用
    bool                        keep_alive_enable;//啟用保持活動(dòng)狀態(tài)超時(shí)
    int                         keep_alive_idle;//保持活動(dòng)空閑時(shí)間。默認(rèn)值為 5(秒)
    int                         keep_alive_interval;//保持活動(dòng)間隔時(shí)間。默認(rèn)值為 5(秒)
    int                         keep_alive_count;//保持活動(dòng)狀態(tài)數(shù)據(jù)包重試發(fā)送計(jì)數(shù)。默認(rèn)值為 3 個(gè)計(jì)數(shù)
    struct ifreq                *if_name;//要通過(guò)的數(shù)據(jù)的接口的名稱。使用默認(rèn)界面而不設(shè)置
} esp_http_client_config_t;

設(shè)置HTTP/HTTPS請(qǐng)求方法

此接口可以手動(dòng)設(shè)置HTTP請(qǐng)求方式(可以覆蓋配置結(jié)構(gòu)體的設(shè)置)

//client為esp_http_client_init函數(shù)返回的結(jié)構(gòu)體對(duì)象
//method為需要設(shè)置的請(qǐng)求方式GET填HTTP_METHOD_GET,POST填HTTP_METHOD_POST,還有其它方式不一一列舉了,可以去這個(gè)枚舉類型里面看
//失敗返回ESP_ERR_INVALID_ARG
esp_err_t esp_http_client_set_method(esp_http_client_handle_t client, esp_http_client_method_t method)

設(shè)置請(qǐng)求頭(如果需要的話)

//client為esp_http_client_init函數(shù)返回的結(jié)構(gòu)體對(duì)象
//key為鍵,valude為值,例如esp_http_client_set_header(client, "Content-Type", "application/json");
//失敗返回ESP_FAIL
esp_err_t esp_http_client_set_header(esp_http_client_handle_t client, const char *key, const char *value)

設(shè)置請(qǐng)求內(nèi)容

此處為POST請(qǐng)求

//client為esp_http_client_init函數(shù)返回的結(jié)構(gòu)體對(duì)象
//data為傳輸?shù)臄?shù)據(jù)首地址
//len為數(shù)據(jù)長(zhǎng)度
//失敗返回ESP_FAIL
esp_err_t esp_http_client_set_post_field(esp_http_client_handle_t client, const char *data, int len)

發(fā)起HTTP/HTTPS請(qǐng)求

此接口默認(rèn)以阻塞方式發(fā)起請(qǐng)求

//client為esp_http_client_init函數(shù)返回的結(jié)構(gòu)體對(duì)象
//失敗返回ESP_FAIL
esp_err_t esp_http_client_perform(esp_http_client_handle_t client)

關(guān)閉鏈接

此函數(shù)放在最后調(diào)用,功能與esp_http_client_init相反

//client為esp_http_client_init函數(shù)返回的結(jié)構(gòu)體對(duì)象
//失敗返回ESP_FAIL
esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)

例程

#include "esp_system.h"
#include "esp_tls.h"

#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/semphr.h"
#include "freertos/task.h"

static const char *TAG = "APP_HTTP";

#define MAX_HTTP_RECV_BUFFER 512
#define MAX_HTTP_OUTPUT_BUFFER 2048

static esp_err_t _http_event_handler(esp_http_client_event_t *evt)
{
    switch (evt->event_id)
    {
    case HTTP_EVENT_ERROR:
        //當(dāng)執(zhí)行過(guò)程中出現(xiàn)任何錯(cuò)誤時(shí),會(huì)發(fā)生此事件 
        ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
        break;
    case HTTP_EVENT_ON_CONNECTED:
        // 一旦 HTTP 連接到服務(wù)器,就不會(huì)執(zhí)行任何數(shù)據(jù)交換
        break;
    case HTTP_EVENT_HEADER_SENT:
        // 將所有標(biāo)頭發(fā)送到服務(wù)器后發(fā)生此事件
        break;
    case HTTP_EVENT_ON_HEADER:
        // 在接收從服務(wù)器發(fā)送的每個(gè)標(biāo)頭時(shí)發(fā)生
        break;
    case HTTP_EVENT_ON_DATA:
        ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
        //在此處理HTTP請(qǐng)求返回的數(shù)據(jù)
        break;
    case HTTP_EVENT_ON_FINISH:
        // 完成 HTTP 會(huì)話時(shí)發(fā)生
        break;
    case HTTP_EVENT_DISCONNECTED:
        // 連接斷開(kāi)時(shí)發(fā)生此事件
        break;
    }
    return ESP_OK;
}

static void http_rest_with_url(void *post_data)
{
    esp_err_t err;
    esp_http_client_config_t config1 = {
        .url = "https://www.baidu.com",
        .transport_type = HTTP_TRANSPORT_OVER_SSL,
        .skip_cert_common_name_check = true,
        // .port = 443,
        .event_handler = _http_event_handler,
    };
    esp_http_client_handle_t client = esp_http_client_init(&config1);


    // POST請(qǐng)求
    esp_http_client_set_method(client, HTTP_METHOD_POST);
    esp_http_client_set_header(client, "Content-Type", "application/json");
    esp_http_client_set_post_field(client, post_data, strlen(post_data));
    err = esp_http_client_perform(client);
    if (err == ESP_OK)
    {
        ESP_LOGI(TAG, "Status = %d, content_length = %d", esp_http_client_get_status_code(client),
                 esp_http_client_get_content_length(client));
    }
    else
    {
        ESP_LOGE(TAG, "HTTP POST request failed: %s", esp_err_to_name(err));
    }
    free(post_data);
    esp_http_client_cleanup(client);
}

填坑

ESP32做為客戶端進(jìn)行HTTPS請(qǐng)求時(shí),如果不需要驗(yàn)證服務(wù)器證書也就是想跳過(guò)證書驗(yàn)證,
改constesp_http_client_config_t結(jié)構(gòu)體中skip_cert_common_name_check成員是沒(méi)有效果的。
他只會(huì)跳過(guò)檢查證書的CN而不是CA,不會(huì)跳過(guò)整個(gè)證書驗(yàn)證。
所以如果想跳過(guò)證書則需要在menuconfig里面修改ESP-TLS選項(xiàng),改為默認(rèn)跳過(guò)服務(wù)器證書如下圖
ESP32 HTTPS客戶端POST請(qǐng)求(跳過(guò)證書驗(yàn)證)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-454823.html

到了這里,關(guān)于ESP32 HTTPS客戶端POST請(qǐng)求(跳過(guò)證書驗(yàn)證)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ESP32藍(lán)牙實(shí)例-BLE服務(wù)器與客戶端通信

    在本文中,我們將介紹如何使用低功耗藍(lán)牙在兩個(gè) ESP32 開(kāi)發(fā)板之間執(zhí)行 BLE 服務(wù)器客戶端通信。 換句話說(shuō),將介紹如何通過(guò) BLE 在兩個(gè) ESP32 開(kāi)發(fā)板之間交換數(shù)據(jù)。 服務(wù)器和客戶端之間的通信將通過(guò) BLE 進(jìn)行,其中一個(gè) ESP32 板充當(dāng) BLE 服務(wù)器并將傳感器讀數(shù)發(fā)送到 ESP32 客戶端

    2024年02月09日
    瀏覽(29)
  • 手機(jī)、電腦mqtt客戶端通過(guò)騰訊云服務(wù)器遠(yuǎn)程連接ESP32

    手機(jī)、電腦mqtt客戶端通過(guò)騰訊云服務(wù)器遠(yuǎn)程連接ESP32

    ????????本文將實(shí)現(xiàn): ????????1、esp32與騰訊云物聯(lián)網(wǎng)服務(wù)器通過(guò)mqtt協(xié)議通信 ????????2、電腦和手機(jī)客戶端通過(guò)mqtt與騰訊云相通信 ????????3、騰訊云服務(wù)器內(nèi)部消息轉(zhuǎn)發(fā),將手機(jī)、電腦發(fā)布的主題轉(zhuǎn)發(fā)給esp32訂閱,實(shí)現(xiàn)手機(jī)、電腦與esp32的遠(yuǎn)程通信。 ?????

    2024年02月11日
    瀏覽(25)
  • 使用 Web-Socket 客戶端在兩個(gè) ESP32 之間進(jìn)行實(shí)時(shí)數(shù)據(jù)傳輸

    近年來(lái), 基于Arduino和ESP32 的網(wǎng)絡(luò)服務(wù)器項(xiàng)目變得非常流行,并且對(duì)各種應(yīng)用都很有用。但是這種 Web 服務(wù)器的主要缺點(diǎn)之一是它的靜態(tài)特性。意味著通過(guò) HTTP 更新網(wǎng)頁(yè),您需要更新整個(gè)網(wǎng)頁(yè),然后才能更新任何數(shù)據(jù)。這個(gè)問(wèn)題有很多解決方法,比如幾秒鐘后自動(dòng)刷新網(wǎng)頁(yè)等等

    2024年02月07日
    瀏覽(44)
  • STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈

    STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈

    目錄 1、簡(jiǎn)介 2、硬件連接 3、上位機(jī)源碼 3.1?widget.h 3.2?widget.c? 3.3?顯示圖 ?4、下位機(jī)源碼 4.1 cubemax配置 ?4.2 keil源碼 本文使用STM32F103C8T6單片機(jī)使用單片機(jī)通過(guò)ESP8266WIFI模塊與QT設(shè)計(jì)的上位機(jī)進(jìn)行通訊,ESP8266設(shè)置AP模式。實(shí)現(xiàn)DHT11傳感器溫濕度的顯示與遠(yuǎn)程控制LED小燈的亮滅

    2024年02月06日
    瀏覽(67)
  • 【異常】客戶端發(fā)起HTTPS請(qǐng)求報(bào)錯(cuò),服務(wù)端返回400 Bad Request ,并且提示No required SSL certificate was sent

    【異常】客戶端發(fā)起HTTPS請(qǐng)求報(bào)錯(cuò),服務(wù)端返回400 Bad Request ,并且提示No required SSL certificate was sent

    HTTP響應(yīng)碼400表示客戶端發(fā)送了一個(gè)無(wú)效的請(qǐng)求。這可能是由于請(qǐng)求中缺少必需的參數(shù)或格式不正確等原因?qū)е碌?。服?wù)器無(wú)法處理此請(qǐng)求并返回400響應(yīng)碼。如果您正在編寫Web應(yīng)用程序,建議在處理請(qǐng)求時(shí)檢查請(qǐng)求的有效性,并在必要時(shí)返回400響應(yīng)碼以指示客戶端請(qǐng)求無(wú)效。

    2024年02月11日
    瀏覽(36)
  • 發(fā)送https請(qǐng)求并跳過(guò)ssl證書驗(yàn)證

    ?平臺(tái)服務(wù)調(diào)用https接口報(bào)錯(cuò): org.springframework.web.client.ResourceAccessException: I/0 error on PoST request for ?\\\"https://XXXXX\\\": java.security.centp.CertificateException: No subject alternative names present; nested exception is javax.net.ssl..SSLHandshakeException: java.security.cert.CertificateException: No subject alternative namesspresent 第

    2024年02月16日
    瀏覽(22)
  • 線上 udp 客戶端請(qǐng)求服務(wù)端客戶端句柄泄漏問(wèn)題

    線上 udp 客戶端請(qǐng)求服務(wù)端客戶端句柄泄漏問(wèn)題

    本題分別從如下三個(gè)方面來(lái)分享: 問(wèn)題描述 自定義連接池的編寫 common_pool 的使用 線上有一個(gè)業(yè)務(wù),某個(gè)通服務(wù)通知 udp 客戶端通過(guò)向 udp 服務(wù)端(某個(gè)硬件設(shè)備)發(fā)送 udp 包來(lái)進(jìn)行用戶上線操作 當(dāng)同時(shí)有大量的請(qǐng)求打到 udp 服務(wù)端的時(shí)候,udp 服務(wù)端的回包可能會(huì)在網(wǎng)絡(luò)環(huán)境

    2024年02月09日
    瀏覽(23)
  • Http遠(yuǎn)程調(diào)用(feign客戶端通過(guò)POST傳遞FORM格式數(shù)據(jù))

    Http遠(yuǎn)程調(diào)用(feign客戶端通過(guò)POST傳遞FORM格式數(shù)據(jù))

    目錄 ? ? ??feign實(shí)現(xiàn)http遠(yuǎn)程調(diào)用(正文) ??????解決方案: 在正式講解HTTP遠(yuǎn)程調(diào)用時(shí),我們先來(lái)了解一下缺省方法的定義。 寫在前面: 缺省參數(shù)可傳可不傳,可以傳多個(gè)但他們必須是相同的類型 每個(gè)方法中缺省參數(shù)只能定義一個(gè),并且只能在參數(shù)的最后定義; 缺省參

    2023年04月08日
    瀏覽(24)
  • 【全】OpenSSL創(chuàng)建生成CA證書、服務(wù)器、客戶端證書及密鑰說(shuō)明

    【全】OpenSSL創(chuàng)建生成CA證書、服務(wù)器、客戶端證書及密鑰說(shuō)明

    本文章對(duì)應(yīng)的文檔: 使用OpenSSL創(chuàng)建生成CA證書服務(wù)器客戶端證書及密鑰資源-CSDN文庫(kù) https://download.csdn.net/download/weixin_41885845/88746920 服務(wù)器需要CA證書、server證書、server私鑰,客戶端需要CA證。 服務(wù)器需要CA證書、server證書、server私鑰,客戶端需要CA證書,client證書、client私鑰。

    2024年01月19日
    瀏覽(45)
  • Kubernetes客戶端認(rèn)證——基于CA證書的雙向認(rèn)證方式

    Kubernetes客戶端認(rèn)證——基于CA證書的雙向認(rèn)證方式

    Kubernetes集群的訪問(wèn)權(quán)限控制由API Server負(fù)責(zé),API Server的訪問(wèn)權(quán)限控制由身份驗(yàn)證(Authentication)、授權(quán)(Authorization)和準(zhǔn)入控制(Admission control)三個(gè)步驟組成,這個(gè)三個(gè)步驟是按序進(jìn)行的(詳細(xì)介紹請(qǐng)參見(jiàn)《(轉(zhuǎn))使用kubectl訪問(wèn)Kubernetes集群時(shí)的身份驗(yàn)證和授權(quán)》)。 其中身份驗(yàn)證

    2023年04月10日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包