【问题标题】:Trying to understand a parsing error when making an HTTP request with C++ on ESP32在 ESP32 上使用 C++ 发出 HTTP 请求时试图理解解析错误
【发布时间】:2020-03-30 00:48:58
【问题描述】:

我正在尝试在 ESP-EYE 上使用 C++ 执行 HTTPS PUT。我从 C esp_https_example 代码开始,并使用相同的 PEM 和 URL。我开始从 C++ 过渡到使用它作为主要用 C++ 编写的项目的一部分。我的电话看起来像:

static const char *URL = "https://signal.unexpectedeof.casa/on-air";


void https_with_url(void)
{
    esp_http_client_config_t* config = (esp_http_client_config_t*)calloc(sizeof(esp_http_client_config_t), 1);
    config->url = URL;
    config->cert_pem = unexpectedeof_casa_root_cert_pem_start;
    config->event_handler = _http_event_handler;

    esp_http_client_handle_t client = esp_http_client_init(config);
    esp_http_client_set_method(client, HTTP_METHOD_PUT);
    esp_err_t err = esp_http_client_perform(client);

    if (err == ESP_OK) {
        ESP_LOGI(TAG, "HTTPS Status = %d, content_length = %d",
                esp_http_client_get_status_code(client),
                esp_http_client_get_content_length(client));
    } else {
        ESP_LOGE(TAG, "Error perform http request %s", esp_err_to_name(err));
    }
    esp_http_client_close(client);
    esp_http_client_cleanup(client);
}

我认为我提供的网址没有被正确复制或初始化,从而导致网址解析错误。当函数 https_with_url 被调用时,我得到这个错误:

E (13593) esp-tls: couldn't get hostname for :signal.unexpectedeof.casa:
E (13593) esp-tls: Failed to open new connection
E (13603) TRANS_SSL: Failed to open a new connection
E (13603) HTTP_CLIENT: Connection failed, sock < 0
E (13613) HTTPS_HANDLING: Error perform http request ESP_ERR_HTTP_CONNECT
I (13623) HTTPS_HANDLING: HTTP_EVENT_DISCONNECTED
I (13623) HTTPS_HANDLING: HTTP_EVENT_DISCONNECTED

由于我使用的是 C++,但解析发生在 esp-idf C 代码中,我想我可能没有正确传递数据,但没有取得太大进展。从 URL 的内联字符串切换到显示的字符数组并没有什么不同。

esp-idf 4.1 版。

【问题讨论】:

    标签: c++ c embedded esp32


    【解决方案1】:

    结果是我在发送请求之前没有正确处理 wifi 事件。

    static void wifi_event_handler(void* arg, esp_event_base_t event_base, 
                                    int32_t event_id, void* event_data)
    {
        if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
            esp_wifi_connect();
        } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
            if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) {
                esp_wifi_connect();
                xEventGroupClearBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
                s_retry_num++;
                ESP_LOGI(LOGTAG, "retry to connect to the AP");
            }
            ESP_LOGI(LOGTAG,"connect to the AP fail");
        } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
            ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
            ESP_LOGI(LOGTAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
            s_retry_num = 0;
            xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
        }
    }
    
    void wifi_init_sta(void)
    {
        s_wifi_event_group = xEventGroupCreate();
    
        ESP_ERROR_CHECK(esp_netif_init());
    
        ESP_ERROR_CHECK(esp_event_loop_create_default());
        esp_netif_create_default_wifi_sta();
    
        wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
        ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    
    
        ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
        ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL));
    
        wifi_config_t wifi_config = { };
        strcpy((char*)wifi_config.sta.ssid, CONFIG_ESP_WIFI_SSID);
        strcpy((char*)wifi_config.sta.password, CONFIG_ESP_WIFI_PASSWORD);
        ESP_LOGI(LOGTAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid);
    
        ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
        ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
        ESP_ERROR_CHECK(esp_wifi_start() );
    
        ESP_LOGI(LOGTAG, "wifi_init_sta finished.");
    }
    

    这方面的例子在esp-idf github repo 下examples/protocols/wifi

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多