]> granicus.if.org Git - esp-idf/commitdiff
esp_http_client: Fix content-type header overwritten by esp_http_client_set_post_field
authorJitin George <jitin@espressif.com>
Thu, 14 Jun 2018 07:06:19 +0000 (12:36 +0530)
committerJitin George <jitin@espressif.com>
Wed, 20 Jun 2018 05:19:26 +0000 (10:49 +0530)
Also, references of non-existent function `esp_http_client_finalize_open` is removed
from `esp_http_client` documentation.

Closes https://github.com/espressif/esp-idf/issues/2047

Closes https://github.com/espressif/esp-idf/issues/2040

components/esp_http_client/esp_http_client.c
components/esp_http_client/include/esp_http_client.h

index 6a6f799e30b5a02a5a211df19e48e764a55a4270..9597021cb755f704e5dc24b3524cad650b1183e3 100644 (file)
@@ -258,6 +258,11 @@ esp_err_t esp_http_client_set_header(esp_http_client_handle_t client, const char
     return http_header_set(client->request->headers, key, value);
 }
 
+esp_err_t esp_http_client_get_header(esp_http_client_handle_t client, const char *key, char **value)
+{
+    return http_header_get(client->request->headers, key, value);
+}
+
 esp_err_t esp_http_client_delete_header(esp_http_client_handle_t client, const char *key)
 {
     return http_header_delete(client->request->headers, key);
@@ -952,7 +957,13 @@ esp_err_t esp_http_client_set_post_field(esp_http_client_handle_t client, const
     client->post_len = len;
     ESP_LOGD(TAG, "set post file length = %d", len);
     if (client->post_data) {
-        err = esp_http_client_set_header(client, "Content-Type", "application/x-www-form-urlencoded");
+        char *value = NULL;
+        if ((err = esp_http_client_get_header(client, "Content-Type", &value)) != ESP_OK) {
+            return err;
+        }
+        if (value == NULL) {
+            err = esp_http_client_set_header(client, "Content-Type", "application/x-www-form-urlencoded");
+        }
     } else {
         client->post_len = 0;
         err = esp_http_client_set_header(client, "Content-Type", NULL);
index 687cf8d3b52221d42ff948ef7375e1d063d990ce..b47f9263ad178a6aca3f0b4ad367d44ca728717d 100644 (file)
@@ -168,7 +168,7 @@ esp_err_t esp_http_client_perform(esp_http_client_handle_t client);
 esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *url);
 
 /**
- * @brief      Set post data, this function must be called before `esp_http_client_finalize_open` or perform
+ * @brief      Set post data, this function must be called before `esp_http_client_perform`.
  *             Note: The data parameter passed to this function is a pointer and this function will not copy the data
  *
  * @param[in]  client  The esp_http_client handle
@@ -205,6 +205,22 @@ int esp_http_client_get_post_field(esp_http_client_handle_t client, char **data)
  */
 esp_err_t esp_http_client_set_header(esp_http_client_handle_t client, const char *key, const char *value);
 
+/**
+ * @brief      Get http request header.
+ *             The value parameter will be set to NULL if there is no header which is same as
+ *             the key specified, otherwise the address of header value will be assigned to value parameter.
+ *             This function must be called after `esp_http_client_init`.
+ *
+ * @param[in]  client  The esp_http_client handle
+ * @param[in]  key     The header key
+ * @param[out] value   The header value
+ *
+ * @return
+ *     - ESP_OK
+ *     - ESP_FAIL
+ */
+esp_err_t esp_http_client_get_header(esp_http_client_handle_t client, const char *key, char **value);
+
 /**
  * @brief      Set http request method
  *
@@ -266,7 +282,7 @@ int esp_http_client_fetch_headers(esp_http_client_handle_t client);
 
 
 /**
- * @brief      Check response data is chunked, must call after `esp_http_client_finalize_open`
+ * @brief      Check response data is chunked
  *
  * @param[in]  client  The esp_http_client handle
  *
@@ -289,7 +305,7 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len)
 
 
 /**
- * @brief      Get http response status code, the valid value if this function invoke after `esp_http_client_perform` or `esp_http_client_finalize_open`
+ * @brief      Get http response status code, the valid value if this function invoke after `esp_http_client_perform`
  *
  * @param[in]  client  The esp_http_client handle
  *
@@ -299,7 +315,7 @@ int esp_http_client_get_status_code(esp_http_client_handle_t client);
 
 /**
  * @brief      Get http response content length (from header Content-Length)
- *             the valid value if this function invoke after `esp_http_client_perform` or `esp_http_client_finalize_open`
+ *             the valid value if this function invoke after `esp_http_client_perform`
  *
  * @param[in]  client  The esp_http_client handle
  *