Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of http-example by
main-https-socket-reuse.cpp
00001 #include "select-demo.h" 00002 00003 /** 00004 * This demo shows how to re-use sockets, so the TLS handshake only has to happen once 00005 */ 00006 00007 #if DEMO == DEMO_HTTPS_SOCKET_REUSE 00008 00009 #include "mbed.h" 00010 #include "easy-connect.h" 00011 #include "https_request.h" 00012 00013 /* List of trusted root CA certificates 00014 * currently one: Let's Encrypt, the CA for httpbin.org 00015 * 00016 * To add more root certificates, just concatenate them. 00017 */ 00018 const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n" 00019 "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" 00020 "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" 00021 "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" 00022 "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" 00023 "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" 00024 "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" 00025 "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" 00026 "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" 00027 "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" 00028 "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" 00029 "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" 00030 "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" 00031 "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" 00032 "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" 00033 "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" 00034 "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" 00035 "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" 00036 "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" 00037 "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" 00038 "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" 00039 "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" 00040 "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" 00041 "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" 00042 "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" 00043 "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" 00044 "-----END CERTIFICATE-----\n"; 00045 00046 void dump_response(HttpResponse* res) { 00047 mbedtls_printf("Status: %d - %s\n", res->get_status_code(), res->get_status_message().c_str()); 00048 00049 mbedtls_printf("Headers:\n"); 00050 for (size_t ix = 0; ix < res->get_headers_length(); ix++) { 00051 mbedtls_printf("\t%s: %s\n", res->get_headers_fields()[ix]->c_str(), res->get_headers_values()[ix]->c_str()); 00052 } 00053 mbedtls_printf("\nBody (%d bytes):\n\n%s\n", res->get_body_length(), res->get_body_as_string().c_str()); 00054 } 00055 00056 int main() { 00057 NetworkInterface* network = easy_connect(true); 00058 if (!network) { 00059 return 1; 00060 } 00061 00062 // Create a TLS socket (which holds a TCPSocket) 00063 printf("\n----- Setting up TLS connection -----\n"); 00064 00065 TLSSocket* socket = new TLSSocket(network, "httpbin.org", 443, SSL_CA_PEM); 00066 socket->set_debug(true); 00067 if (socket->connect() != 0) { 00068 printf("TLS Connect failed %d\n", socket->error()); 00069 return 1; 00070 } 00071 00072 // GET request to httpbin.org 00073 { 00074 HttpsRequest* get_req = new HttpsRequest(socket, HTTP_GET, "https://httpbin.org/status/418"); 00075 get_req->set_debug(true); 00076 00077 HttpResponse* get_res = get_req->send(); 00078 if (!get_res) { 00079 printf("HttpRequest failed (error code %d)\n", get_req->get_error()); 00080 return 1; 00081 } 00082 printf("\n----- HTTPS GET response -----\n"); 00083 dump_response(get_res); 00084 00085 delete get_req; 00086 } 00087 00088 // POST request to httpbin.org 00089 { 00090 HttpsRequest* post_req = new HttpsRequest(socket, HTTP_POST, "https://httpbin.org/post"); 00091 post_req->set_debug(true); 00092 post_req->set_header("Content-Type", "application/json"); 00093 00094 const char body[] = "{\"hello\":\"world\"}"; 00095 00096 HttpResponse* post_res = post_req->send(body, strlen(body)); 00097 if (!post_res) { 00098 printf("HttpRequest failed (error code %d)\n", post_req->get_error()); 00099 return 1; 00100 } 00101 00102 printf("\n----- HTTPS POST response -----\n"); 00103 dump_response(post_res); 00104 00105 delete post_req; 00106 } 00107 00108 delete socket; 00109 00110 wait(osWaitForever); 00111 } 00112 00113 #endif
Generated on Fri Jul 15 2022 13:51:28 by
1.7.2
