Are there known problems with esp_http_client code ?
I use the code below to download gif images, and get intermittent failures.
It looks like the download is wrong, see dump lower.
Thanks for any help.
Danny
Code: Select all
char *LoadGif::loadGif(const char *url, size_t *data_size) {
esp_http_client_handle_t http_client;
esp_http_client_config_t http_config;
memset(&http_config, 0, sizeof(http_config));
http_config.url = url;
ESP_LOGD(loadgif_tag, "LoadGif(%s)", url);
http_client = esp_http_client_init(&http_config);
esp_err_t err = esp_http_client_open(http_client, 0);
if (err != ESP_OK) { // Not connected
ESP_LOGE(loadgif_tag, "Could not connect to %s", url);
http_config.url = 0;
esp_http_client_close(http_client);
esp_http_client_cleanup(http_client);
return 0;
}
int content_length = esp_http_client_fetch_headers(http_client);
if (content_length < 0) {
ESP_LOGE(loadgif_tag, "Content length not found %d\n", content_length);
http_config.url = 0;
esp_http_client_close(http_client);
esp_http_client_cleanup(http_client);
return 0;
}
ESP_LOGI(loadgif_tag, "Content length %d", content_length);
if (buf)
free((void *)buf);
buflen = content_length + 4; // a bit of buffer after...
buf = (char *)malloc(buflen);
int pos = 0, total = 0, rlen = 0;
while (total < content_length && err == ESP_OK) {
rlen = esp_http_client_read(http_client, buf + pos, content_length - total);
if (rlen < 0) {
ESP_LOGE(loadgif_tag, "error reading data");
esp_http_client_close(http_client);
esp_http_client_cleanup(http_client);
free(buf); buf = 0;
http_config.url = 0;
return 0;
}
pos += rlen;
total += rlen;
ESP_LOGI(loadgif_tag, "rlen = %d, pos %d, total %d", rlen, pos, total);
}
ESP_LOGI(loadgif_tag, "reply ok, downloaded %d bytes", total);
esp_http_client_close(http_client);
esp_http_client_cleanup(http_client);
http_config.url = 0;
if (data_size)
*data_size = total;
return buf;
}
Code: Select all
Querying api.wunderground.com .. ok
I (10155) Weather: Content length 2570
I (10165) LoadGif: LoadGif(http://icons.wxug.com/i/c/k/nt_clear.gif)
I (10245) LoadGif: Content length 1647
I (10245) LoadGif: rlen = 1647, pos 1647, total 1647
I (10255) LoadGif: reply ok, downloaded 1647 bytes
I (10255) LoadGif: Download -> len 1647
I (10255) LoadGif: Download 000 : 47 49 46 38 39 61 32 00 32 00 d5 20 00 96 d2 eb GIF89a2.2.. ....
I (10265) LoadGif: Download 010 : 6d c1 e1 8d d0 e3 81 c9 e7 a9 dd e5 62 bc e1 5c m...........b..\
I (10275) LoadGif: Download 020 : ba df 62 bc e0 83 cb e2 77 c5 e5 ab db ef f4 fa ..b.....w.......
I (10285) LoadGif: Download 030 : fd ea f6 fb d5 ed f7 c0 e4 f3 8c ce e9 98 d5 e4 ................
I (10295) LoadGif: Download 040 : 78 c6 e1 b5 df f1 67 bf e0 df f1 f9 7d c9 e2 72 x.....g.....}..r
I (10305) LoadGif: Download 050 : c4 e1 93 d3 e3 88 ce e2 6c c0 e3 9e d8 e4 ca e8 ........l.......
I (10315) LoadGif: Download 060 : f5 a3 da e4 a1 d7 ed 57 b7 df ae df e5 ff ff ff .......W........
I (10325) LoadGif: Download 070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
I (10335) LoadGif: Download 080 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
I (10345) LoadGif: Download 090 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
I (10355) LoadGif: Download 0a0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
I (10365) LoadGif: Download 0b0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
I (10375) LoadGif: Download 0c0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 21 ff 0b .............!..
I (10385) LoadGif: Download 0d0 : 58 4d 50 20 44 61 74 61 58 4d 50 3c 3f 78 70 61 XMP DataXMP<?xpa
I (10395) LoadGif: Download 0e0 : 63 6b 65 74 20 62 65 67 69 6e 3d 22 ef bb bf 22 cket begin="..."