diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 511618d989..31f6c0e2d6 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -824,7 +824,9 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client) switch (client->response->status_code) { case HttpStatus_MovedPermanently: case HttpStatus_Found: + case HttpStatus_SeeOther: case HttpStatus_TemporaryRedirect: + case HttpStatus_PermanentRedirect: esp_http_client_set_redirection(client); client->redirect_counter ++; client->process_again = 1; diff --git a/components/esp_http_client/include/esp_http_client.h b/components/esp_http_client/include/esp_http_client.h index d1b530a42e..6ba8ed6e58 100644 --- a/components/esp_http_client/include/esp_http_client.h +++ b/components/esp_http_client/include/esp_http_client.h @@ -149,7 +149,9 @@ typedef enum { HttpStatus_MultipleChoices = 300, HttpStatus_MovedPermanently = 301, HttpStatus_Found = 302, + HttpStatus_SeeOther = 303, HttpStatus_TemporaryRedirect = 307, + HttpStatus_PermanentRedirect = 308, /* 4xx - Client Error */ HttpStatus_BadRequest = 400, diff --git a/components/esp_https_ota/src/esp_https_ota.c b/components/esp_https_ota/src/esp_https_ota.c index 612b523d23..2734a20a3f 100644 --- a/components/esp_https_ota/src/esp_https_ota.c +++ b/components/esp_https_ota/src/esp_https_ota.c @@ -41,12 +41,29 @@ struct esp_https_ota_handle { typedef struct esp_https_ota_handle esp_https_ota_t; +static bool redirection_required(int status_code) +{ + switch (status_code) { + case HttpStatus_MovedPermanently: + case HttpStatus_Found: + case HttpStatus_SeeOther: + case HttpStatus_TemporaryRedirect: + case HttpStatus_PermanentRedirect: + return true; + default: + return false; + } + return false; +} + static bool process_again(int status_code) { switch (status_code) { case HttpStatus_MovedPermanently: case HttpStatus_Found: + case HttpStatus_SeeOther: case HttpStatus_TemporaryRedirect: + case HttpStatus_PermanentRedirect: case HttpStatus_Unauthorized: return true; default: @@ -58,7 +75,7 @@ static bool process_again(int status_code) static esp_err_t _http_handle_response_code(esp_http_client_handle_t http_client, int status_code) { esp_err_t err; - if (status_code == HttpStatus_MovedPermanently || status_code == HttpStatus_Found || status_code == HttpStatus_TemporaryRedirect) { + if (redirection_required(status_code)) { err = esp_http_client_set_redirection(http_client); if (err != ESP_OK) { ESP_LOGE(TAG, "URL redirection Failed");