diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 61faf21357..460470a1f8 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -233,7 +233,6 @@ static int http_on_header_event(esp_http_client_handle_t client) static int http_on_header_field(http_parser *parser, const char *at, size_t length) { esp_http_client_t *client = parser->data; - http_on_header_event(client); http_utils_append_string(&client->current_header_key, at, length); return 0; @@ -254,6 +253,7 @@ static int http_on_header_value(http_parser *parser, const char *at, size_t leng http_utils_append_string(&client->auth_header, at, length); } http_utils_append_string(&client->current_header_value, at, length); + http_on_header_event(client); return 0; } @@ -1645,6 +1645,15 @@ esp_http_client_transport_t esp_http_client_get_transport_type(esp_http_client_h } } +esp_err_t esp_http_client_set_auth_data(esp_http_client_handle_t client, const char *auth_data, int len) +{ + if (client == NULL || auth_data == NULL || len <= 0) { + return ESP_ERR_INVALID_ARG; + } + http_utils_append_string(&client->auth_header, auth_data, len); + return ESP_OK; +} + void esp_http_client_add_auth(esp_http_client_handle_t client) { if (client == NULL) { diff --git a/components/esp_http_client/include/esp_http_client.h b/components/esp_http_client/include/esp_http_client.h index c125c9d468..6135976d56 100644 --- a/components/esp_http_client/include/esp_http_client.h +++ b/components/esp_http_client/include/esp_http_client.h @@ -600,6 +600,21 @@ esp_http_client_transport_t esp_http_client_get_transport_type(esp_http_client_h */ esp_err_t esp_http_client_set_redirection(esp_http_client_handle_t client); +/** + * @brief On receiving a custom authentication header, this API can be invoked to set the + * authentication information from the header. This API can be called from the event + * handler. + * + * @param[in] client The esp_http_client handle + * @param[in] auth_data The authentication data received in the header + * @param[in] len length of auth_data. + * + * @return + * - ESP_ERR_INVALID_ARG + * - ESP_OK + */ +esp_err_t esp_http_client_set_auth_data(esp_http_client_handle_t client, const char *auth_data, int len); + /** * @brief On receiving HTTP Status code 401, this API can be invoked to add authorization * information.