diff --git a/esphome/components/http_request/http_request_idf.cpp b/esphome/components/http_request/http_request_idf.cpp index 13420364e6..3aa032b06e 100644 --- a/esphome/components/http_request/http_request_idf.cpp +++ b/esphome/components/http_request/http_request_idf.cpp @@ -152,19 +152,23 @@ std::shared_ptr HttpRequestIDF::perform(const std::string &url, c } container->feed_wdt(); - container->content_length = esp_http_client_fetch_headers(client); - if (container->content_length < 0) { - container->status_code = container->content_length; - } else { - container->feed_wdt(); - container->status_code = esp_http_client_get_status_code(client); - container->feed_wdt(); - container->set_response_headers(user_data.response_headers); - container->duration_ms = millis() - start; - if (is_success(container->status_code)) { - return container; - } + int64_t result = esp_http_client_fetch_headers(client); + if (result < 0) { + this->status_momentary_error("failed", 1000); + ESP_LOGE(TAG, "HTTP Request failed: %s", esp_err_to_name(result)); + esp_http_client_cleanup(client); + return nullptr; } + container->content_length = result; + container->feed_wdt(); + container->status_code = esp_http_client_get_status_code(client); + container->feed_wdt(); + container->set_response_headers(user_data.response_headers); + container->duration_ms = millis() - start; + if (is_success(container->status_code)) { + return container; + } + if (this->follow_redirects_) { auto num_redirects = this->redirect_limit_; while (is_redirect(container->status_code) && num_redirects > 0) { @@ -209,8 +213,7 @@ std::shared_ptr HttpRequestIDF::perform(const std::string &url, c ESP_LOGE(TAG, "HTTP Request failed; URL: %s; Code: %d", url.c_str(), container->status_code); this->status_momentary_error("failed", 1000); - esp_http_client_cleanup(client); - return nullptr; + return container; } int HttpContainerIDF::read(uint8_t *buf, size_t max_len) {