Merge branch 'fix/http_client_disable_auto_redirect_causes_loop' into 'master'

http_client: fixed looping caused when disable_auto_redirect enabled

Closes IDFGH-9243

See merge request espressif/esp-idf!22158
This commit is contained in:
Mahavir Jain 2023-02-24 19:43:39 +08:00
commit 190f4c72bd
2 changed files with 10 additions and 4 deletions

View File

@ -861,7 +861,12 @@ esp_err_t esp_http_client_set_redirection(esp_http_client_handle_t client)
return ESP_ERR_INVALID_ARG;
}
ESP_LOGD(TAG, "Redirect to %s", client->location);
return esp_http_client_set_url(client, client->location);
esp_err_t err = esp_http_client_set_url(client, client->location);
if (err == ESP_OK) {
client->redirect_counter ++;
client->process_again = 1; // used only in the blocking mode (when esp_http_client_perform() is called)
}
return err;
}
static esp_err_t esp_http_check_response(esp_http_client_handle_t client)
@ -882,10 +887,10 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client)
if (client->disable_auto_redirect) {
http_dispatch_event(client, HTTP_EVENT_REDIRECT, NULL, 0);
} else {
ESP_ERROR_CHECK(esp_http_client_set_redirection(client));
if (esp_http_client_set_redirection(client) != ESP_OK){
return ESP_FAIL;
};
}
client->redirect_counter ++;
client->process_again = 1;
break;
case HttpStatus_Unauthorized:
esp_http_client_add_auth(client);

View File

@ -537,6 +537,7 @@ esp_http_client_transport_t esp_http_client_get_transport_type(esp_http_client_h
* @brief Set redirection URL.
* When received the 30x code from the server, the client stores the redirect URL provided by the server.
* This function will set the current URL to redirect to enable client to execute the redirection request.
* When `disable_auto_redirect` is set, the client will not call this function but the event `HTTP_EVENT_REDIRECT` will be dispatched giving the user contol over the redirection event.
*
* @param[in] client The esp_http_client handle
*