Http request to an https site
Posted: Thu Jun 09, 2022 6:24 pm
Hello
In visual code i updated to frame work esp platform 4.4,
before this update i could do an http request to get the position of the ISS station.
void http_iss(void * pvParam)
{
esp_http_client_config_t config ;
config.url = ISS_SERVER.serverName;
config.transport_type = HTTP_TRANSPORT_OVER_TCP;
config.event_handler = _http_event_handler;
config.buffer_size = 2048;
esp_http_client_handle_t client = esp_http_client_init(&config);
ISS_SERVER.ISS_Json ="";
for(;;)
{
esp_http_client_set_header(client,"Content-Typ","application/json");
esp_http_client_set_header(client,"Connection" ,"Keep-Alive");
esp_http_client_set_header(client,"Keep-Alive" ,"timeout=5");
esp_err_t err = esp_http_client_perform(client);
Serial.printf("xxxxxxxxxxxxxxxxxx");
if (err == ESP_OK)
{
char *buffer = (char *) malloc(MAX_HTTP_RECV_BUFFER + 1); // http receive buffer
esp_http_client_read(client,buffer,esp_http_client_get_content_length(client)); //{"name":"iss","id":25544,"latitude":-16.048352510626,"longitude":-23.31397684452,"altitude":422.82941853046,"velocity":27564.33986479,"visibility":"daylight","footprint":4521.8303508566,"timestamp":1652553547,"daynum":2459714.2771644,"solar_lat":18.760279280377,"solar_lon":259.31318637856,"units":"kilometers"}
if ( esp_http_client_get_status_code(client) == 200)
{
char *dummy = (char *) malloc(esp_http_client_get_content_length(client)+1);
memcpy(dummy,buffer,esp_http_client_get_content_length(client));
dummy[esp_http_client_get_content_length(client)] = 0;
//Serial.printf("%d\n%s\n",esp_http_client_get_content_length(client),dummy);
ISS_SERVER.ISS_Json = "";
int content_lenght = 0;
content_lenght = esp_http_client_get_content_length(client);
for (int i=0;i<content_lenght;i++) {
ISS_SERVER.ISS_Json += buffer; //convert to string
}
DynamicJsonDocument ISS_json(512);
deserializeJson(ISS_json,ISS_SERVER.ISS_Json);
ISS_DATA.Altitude = ISS_json["altitude"];
ISS_DATA.lat = ISS_json["latitude"];
ISS_DATA.lon = ISS_json["longitude"];
ISS_DATA.Velocity = ISS_json["velocity"];
//ISS_DATA.Visibility = ISS_json["visibility"];
//Serial.printf("%.4f\t%.4f\t%.4f\t%.4f\n",ISS_DATA.Altitude,ISS_DATA.lat,ISS_DATA.lon,ISS_DATA.Velocity);
}
free(buffer);
}
err = esp_http_client_close(client);
assert(xQueueOverwrite(ISS_queue,&ISS_DATA));
Now after the update, i cant get it back on work
i have the next error:
E (148961) esp-tls-mbedtls: No server verification option set in esp_tls_cfg_t structure. Check esp_tls API reference
E (148961) esp-tls-mbedtls: Failed to set client configurations, returned [0x8017] (ESP_ERR_MBEDTLS_SSL_SETUP_FAILED)
E (148971) esp-tls: create_ssl_handle failed
E (148981) esp-tls: Failed to open new connection
E (148981) TRANSPORT_BASE: Failed to open a new connection
E (148991) HTTP_CLIENT: Connection failed, sock < 0
i found that i have to
You need certificate to make https requests. In case you dont want to implement this, just edit your sdkconfig "Allow potentially insecure options" -> true
"Skip server certificate verification by default" -> true
But i am on visual code, so i have to do this via the main.c file, any idea where and how to perform this action?
i just found this on the esp32 website
skip server verification: This is an insecure option provided in the ESP-TLS for testing purpose. The option can be set by enabling CONFIG_ESP_TLS_INSECURE and CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY in the ESP-TLS menuconfig. When this option is enabled the ESP-TLS will skip server verification by default when no other options for server verification are selected in the esp_tls_cfg_t structure.
Thanks
In visual code i updated to frame work esp platform 4.4,
before this update i could do an http request to get the position of the ISS station.
void http_iss(void * pvParam)
{
esp_http_client_config_t config ;
config.url = ISS_SERVER.serverName;
config.transport_type = HTTP_TRANSPORT_OVER_TCP;
config.event_handler = _http_event_handler;
config.buffer_size = 2048;
esp_http_client_handle_t client = esp_http_client_init(&config);
ISS_SERVER.ISS_Json ="";
for(;;)
{
esp_http_client_set_header(client,"Content-Typ","application/json");
esp_http_client_set_header(client,"Connection" ,"Keep-Alive");
esp_http_client_set_header(client,"Keep-Alive" ,"timeout=5");
esp_err_t err = esp_http_client_perform(client);
Serial.printf("xxxxxxxxxxxxxxxxxx");
if (err == ESP_OK)
{
char *buffer = (char *) malloc(MAX_HTTP_RECV_BUFFER + 1); // http receive buffer
esp_http_client_read(client,buffer,esp_http_client_get_content_length(client)); //{"name":"iss","id":25544,"latitude":-16.048352510626,"longitude":-23.31397684452,"altitude":422.82941853046,"velocity":27564.33986479,"visibility":"daylight","footprint":4521.8303508566,"timestamp":1652553547,"daynum":2459714.2771644,"solar_lat":18.760279280377,"solar_lon":259.31318637856,"units":"kilometers"}
if ( esp_http_client_get_status_code(client) == 200)
{
char *dummy = (char *) malloc(esp_http_client_get_content_length(client)+1);
memcpy(dummy,buffer,esp_http_client_get_content_length(client));
dummy[esp_http_client_get_content_length(client)] = 0;
//Serial.printf("%d\n%s\n",esp_http_client_get_content_length(client),dummy);
ISS_SERVER.ISS_Json = "";
int content_lenght = 0;
content_lenght = esp_http_client_get_content_length(client);
for (int i=0;i<content_lenght;i++) {
ISS_SERVER.ISS_Json += buffer; //convert to string
}
DynamicJsonDocument ISS_json(512);
deserializeJson(ISS_json,ISS_SERVER.ISS_Json);
ISS_DATA.Altitude = ISS_json["altitude"];
ISS_DATA.lat = ISS_json["latitude"];
ISS_DATA.lon = ISS_json["longitude"];
ISS_DATA.Velocity = ISS_json["velocity"];
//ISS_DATA.Visibility = ISS_json["visibility"];
//Serial.printf("%.4f\t%.4f\t%.4f\t%.4f\n",ISS_DATA.Altitude,ISS_DATA.lat,ISS_DATA.lon,ISS_DATA.Velocity);
}
free(buffer);
}
err = esp_http_client_close(client);
assert(xQueueOverwrite(ISS_queue,&ISS_DATA));
Now after the update, i cant get it back on work
i have the next error:
E (148961) esp-tls-mbedtls: No server verification option set in esp_tls_cfg_t structure. Check esp_tls API reference
E (148961) esp-tls-mbedtls: Failed to set client configurations, returned [0x8017] (ESP_ERR_MBEDTLS_SSL_SETUP_FAILED)
E (148971) esp-tls: create_ssl_handle failed
E (148981) esp-tls: Failed to open new connection
E (148981) TRANSPORT_BASE: Failed to open a new connection
E (148991) HTTP_CLIENT: Connection failed, sock < 0
i found that i have to
You need certificate to make https requests. In case you dont want to implement this, just edit your sdkconfig "Allow potentially insecure options" -> true
"Skip server certificate verification by default" -> true
But i am on visual code, so i have to do this via the main.c file, any idea where and how to perform this action?
i just found this on the esp32 website
skip server verification: This is an insecure option provided in the ESP-TLS for testing purpose. The option can be set by enabling CONFIG_ESP_TLS_INSECURE and CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY in the ESP-TLS menuconfig. When this option is enabled the ESP-TLS will skip server verification by default when no other options for server verification are selected in the esp_tls_cfg_t structure.
Thanks