首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ESP32发出HTTPS请求

从ESP32发出HTTPS请求
EN

Stack Overflow用户
提问于 2022-03-25 14:54:24
回答 2查看 2K关注 0票数 1

我正在从我的ESP32 S2卡卢加工具包中提出一个帖子请求。在局域网中运行服务器程序时,我已经测试了HTTP请求。我正在使用esp_http_client_handle_tesp_http_client.hesp_http_client_config_t来完成这个任务。

现在,我在AWS网关中设置了一个HTTPS。我现在收到了https的以下错误:

代码语言:javascript
运行
复制
E (148961) esp-tls-mbedtls: No server verification option set in esp_tls_cfg_t structure. Check esp_tls API reference
E (148961) esp-tls-mbedtls: Failed to set client configurations, returned [0x8017] (ESP_ERR_MBEDTLS_SSL_SETUP_FAILED)
E (148971) esp-tls: create_ssl_handle failed
E (148981) esp-tls: Failed to open new connection
E (148981) TRANSPORT_BASE: Failed to open a new connection
E (148991) HTTP_CLIENT: Connection failed, sock < 0

我怎么才能解决这个问题?谢谢

编辑:下面是我使用的代码,我为post请求创建了一个http客户机:

代码语言:javascript
运行
复制
esp_err_t client_event_get_handler(esp_http_client_event_handle_t evt)
{
    switch (evt->event_id)
    {
    case HTTP_EVENT_ON_DATA:
        printf("HTTP GET EVENT DATA: %s", (char *)evt->data);
        break;
    
    default:
        break;
    }
    return ESP_OK;
}

static void post_rest_function( char *payload , int len)
{
    esp_http_client_config_t config_post = {
        .url = SERVER_URL,
        .method = HTTP_METHOD_POST,
        .event_handler = client_event_get_handler,
        .auth_type = HTTP_AUTH_TYPE_NONE,
        .transport_type = HTTP_TRANSPORT_OVER_TCP
    };

    esp_http_client_handle_t client = esp_http_client_init(&config_post);
    
    esp_http_client_set_post_field(client, payload, len);
    esp_http_client_set_header(client, "Content-Type", "image/jpeg");

    esp_http_client_perform(client);
    esp_http_client_cleanup(client);
}

我主要用它作为图像有效载荷:

代码语言:javascript
运行
复制
void app_main(){
....
post_rest_function( (char *)pic->buf, pic->len);
....
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-25 19:14:59

您需要证书才能发出https请求。如果您不想实现这一点,只需编辑sdkconfig“允许潜在的不安全选项”-> true即可。

“默认情况下Skip服务器证书验证”-> true

小心,这不安全。

票数 1
EN

Stack Overflow用户

发布于 2022-08-27 07:34:36

此外,您可以选择包含证书以确保传输是安全的(有效服务器)。

您可以获得主机就像这样的根SSL证书,查看到56分钟标记,以获得完整的解释。

或者您可以使用espressif在以色列国防军框架中提供的包含的证书包,用于:

在代码中包括#include "esp_crt_bundle.h",在client_config_t中添加以下内容:

代码语言:javascript
运行
复制
.transport_type = HTTP_TRANSPORT_OVER_SSL,  //Specify transport type
.crt_bundle_attach = esp_crt_bundle_attach, //Attach the certificate bundle 

在此之后,这一过程仍然是一样的。

我上面链接的视频很有帮助,我建议你看整件事:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71618972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档