From 483c3d7a7b9d2f923ccd3f07501900793ed62aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20K=C3=B6lker?= Date: Sat, 23 Jun 2018 18:31:09 +0000 Subject: [PATCH] esp_http_client: add head method support Merges https://github.com/espressif/esp-idf/pull/2093 --- components/esp_http_client/esp_http_client.c | 8 +++++++- components/esp_http_client/include/esp_http_client.h | 1 + .../esp_http_client/esp_http_client_test.py | 1 + .../esp_http_client/main/esp_http_client_example.c | 12 ++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index f504ba1d21..0476026a14 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -130,7 +130,8 @@ static const char *HTTP_METHOD_MAPPING[] = { "POST", "PUT", "PATCH", - "DELETE" + "DELETE", + "HEAD" }; /** @@ -695,6 +696,11 @@ static int esp_http_client_get_data(esp_http_client_handle_t client) if (client->state < HTTP_STATE_RES_COMPLETE_HEADER) { return ESP_FAIL; } + + if (client->connection_info.method == HTTP_METHOD_HEAD) { + return 0; + } + esp_http_buffer_t *res_buffer = client->response->buffer; ESP_LOGD(TAG, "data_process=%d, content_length=%d", client->response->data_process, client->response->content_length); diff --git a/components/esp_http_client/include/esp_http_client.h b/components/esp_http_client/include/esp_http_client.h index b47f9263ad..2ad756a157 100644 --- a/components/esp_http_client/include/esp_http_client.h +++ b/components/esp_http_client/include/esp_http_client.h @@ -76,6 +76,7 @@ typedef enum { HTTP_METHOD_PUT, /*!< HTTP PUT Method */ HTTP_METHOD_PATCH, /*!< HTTP PATCH Method */ HTTP_METHOD_DELETE, /*!< HTTP DELETE Method */ + HTTP_METHOD_HEAD, /*!< HTTP HEAD Method */ HTTP_METHOD_MAX, } esp_http_client_method_t; diff --git a/examples/protocols/esp_http_client/esp_http_client_test.py b/examples/protocols/esp_http_client/esp_http_client_test.py index 9ca1d6f091..063510a805 100644 --- a/examples/protocols/esp_http_client/esp_http_client_test.py +++ b/examples/protocols/esp_http_client/esp_http_client_test.py @@ -35,6 +35,7 @@ def test_examples_protocol_esp_http_client(env, extra_data): dut1.expect(re.compile(r"HTTP PUT Status = 200, content_length = (\d)")) dut1.expect(re.compile(r"HTTP PATCH Status = 200, content_length = (\d)")) dut1.expect(re.compile(r"HTTP DELETE Status = 200, content_length = (\d)")) + dut1.expect(re.compile(r"HTTP HEAD Status = 200, content_length = (\d)")) dut1.expect(re.compile(r"HTTP Basic Auth Status = 200, content_length = (\d)")) dut1.expect(re.compile(r"HTTP Basic Auth redirect Status = 200, content_length = (\d)")) dut1.expect(re.compile(r"HTTP Digest Auth Status = 200, content_length = (\d)")) diff --git a/examples/protocols/esp_http_client/main/esp_http_client_example.c b/examples/protocols/esp_http_client/main/esp_http_client_example.c index 4a489080b9..c0f1e64c23 100644 --- a/examples/protocols/esp_http_client/main/esp_http_client_example.c +++ b/examples/protocols/esp_http_client/main/esp_http_client_example.c @@ -136,6 +136,18 @@ static void http_rest() ESP_LOGE(TAG, "HTTP DELETE request failed: %s", esp_err_to_name(err)); } + //HEAD + esp_http_client_set_url(client, "http://httpbin.org/get"); + esp_http_client_set_method(client, HTTP_METHOD_HEAD); + err = esp_http_client_perform(client); + if (err == ESP_OK) { + ESP_LOGI(TAG, "HTTP HEAD Status = %d, content_length = %d", + esp_http_client_get_status_code(client), + esp_http_client_get_content_length(client)); + } else { + ESP_LOGE(TAG, "HTTP HEAD request failed: %s", esp_err_to_name(err)); + } + esp_http_client_cleanup(client); }