/* HTTPS GET Example using plain mbedTLS sockets * * Contacts the howsmyssl.com API via TLS v1.2 and reads a JSON * response. * * Adapted from the ssl_client1 example in mbedtls. * * Original Copyright (C) 2006-2016, ARM Limited, All Rights Reserved, Apache 2.0 License. * Additions Copyright (C) Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD, Apache 2.0 License. * * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_event.h" #include "esp_log.h" #include "esp_system.h" #include "nvs_flash.h" #include "protocol_examples_common.h" #include "esp_netif.h" #include "lwip/err.h" #include "lwip/sockets.h" #include "lwip/sys.h" #include "lwip/netdb.h" #include "lwip/dns.h" #include "esp_tls.h" #include "esp_crt_bundle.h" #define MAX_URLS 2 static const char *web_urls[MAX_URLS] = { "https://www.howsmyssl.com/a/check", "https://espressif.com", }; static const char *TAG = "example"; static void https_get_task(void *pvParameters) { while (1) { int conn_count = 0; ESP_LOGI(TAG, "Connecting to %d URLs", MAX_URLS); for (int i = 0; i < MAX_URLS; i++) { esp_tls_cfg_t cfg = { .crt_bundle_attach = esp_crt_bundle_attach, }; struct esp_tls *tls = esp_tls_conn_http_new(web_urls[i], &cfg); if (tls != NULL) { ESP_LOGI(TAG, "Connection established to %s", web_urls[i]); conn_count++; } else { ESP_LOGE(TAG, "Could not connect to %s", web_urls[i]); } esp_tls_conn_delete(tls); vTaskDelay(1000 / portTICK_PERIOD_MS); } ESP_LOGI(TAG, "Completed %d connections", conn_count); ESP_LOGI(TAG, "Starting over again..."); } } void app_main(void) { ESP_ERROR_CHECK( nvs_flash_init() ); esp_netif_init(); ESP_ERROR_CHECK(esp_event_loop_create_default()); /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. * Read "Establishing Wi-Fi or Ethernet Connection" section in * examples/protocols/README.md for more information about this function. */ ESP_ERROR_CHECK(example_connect()); xTaskCreate(&https_get_task, "https_get_task", 8192, NULL, 5, NULL); }