HTTP/HTTPS client Hello World application running with X-NUCLEO-IDW01M1v2 wifi board.

Dependencies:   HTTPClient NetworkSocketAPI X_NUCLEO_IDW01M1v2 mbed

Fork of HTTPClient_HelloWorld by ST Expansion SW Team

Example of HTTP and HTTPS connections using X-NUCLEO-IDW01M1 Wi-Fi expansion board.
The application is meant to be used with mbed OS 2 ("Classic") only (no mbedOS 5 support).
For HTTPS connection it uses the TLS/SSL feature provided natively by the Wi-Fi module and performs secure connection to the server also verifying the server identity.
To avoid expired CA certificates, system time (in epoch) must be manually entered (e..g. using http://www.epochconverter.com/ ) .
Retrieval of current time from an NTP server is shown by this example.

Committer:
mapellil
Date:
Thu Nov 17 14:10:21 2016 +0000
Revision:
8:1b5c28fe5e94
Parent:
5:526c0df8cbff
Child:
9:b54448c7f712
Added NSAPITests lib for a more extensive test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mapellil 8:1b5c28fe5e94 1
mapellil 8:1b5c28fe5e94 2 //#define TESTV2
mapellil 8:1b5c28fe5e94 3 #ifdef TESTV2
mapellil 8:1b5c28fe5e94 4
mapellil 8:1b5c28fe5e94 5 #include "mbed.h"
mapellil 8:1b5c28fe5e94 6 #include "SpwfInterface.h"
mapellil 8:1b5c28fe5e94 7 #include "NSAPITests.h"
mapellil 8:1b5c28fe5e94 8
mapellil 8:1b5c28fe5e94 9 //------------------------------------
mapellil 8:1b5c28fe5e94 10 // Hyperterminal configuration
mapellil 8:1b5c28fe5e94 11 // 9600 bauds, 8-bit data, no parity
mapellil 8:1b5c28fe5e94 12 //------------------------------------
mapellil 8:1b5c28fe5e94 13
mapellil 8:1b5c28fe5e94 14 Serial pc(USBTX, USBRX);
mapellil 8:1b5c28fe5e94 15 DigitalOut myled(LED1);
mapellil 8:1b5c28fe5e94 16 SpwfSAInterface spwf(D8, D2, false);
mapellil 8:1b5c28fe5e94 17
mapellil 8:1b5c28fe5e94 18 int main()
mapellil 8:1b5c28fe5e94 19 {
mapellil 8:1b5c28fe5e94 20 int32_t err;
mapellil 8:1b5c28fe5e94 21 // char * ssid = "STM";
mapellil 8:1b5c28fe5e94 22 // char * seckey = "STMdemoPWD";
mapellil 8:1b5c28fe5e94 23 char * ssid = "crespan";
mapellil 8:1b5c28fe5e94 24 char * seckey = "Elfrontal1";
mapellil 8:1b5c28fe5e94 25
mapellil 8:1b5c28fe5e94 26
mapellil 8:1b5c28fe5e94 27 pc.printf("\r\nSpwf Interface NSAPI Tests\r\n");
mapellil 8:1b5c28fe5e94 28 pc.printf("\r\nconnecting to AP\r\n");
mapellil 8:1b5c28fe5e94 29
mapellil 8:1b5c28fe5e94 30 err = spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA);
mapellil 8:1b5c28fe5e94 31
mapellil 8:1b5c28fe5e94 32 if (!err) {
mapellil 8:1b5c28fe5e94 33 printf("Interface failed to connect with code %d\r\n", err);
mapellil 8:1b5c28fe5e94 34 } else {
mapellil 8:1b5c28fe5e94 35 do {
mapellil 8:1b5c28fe5e94 36
mapellil 8:1b5c28fe5e94 37 nsapi_tests("SPWF Tests", &spwf, "192.168.1.19", 32001);
mapellil 8:1b5c28fe5e94 38
mapellil 8:1b5c28fe5e94 39 } while (1);
mapellil 8:1b5c28fe5e94 40 spwf.disconnect();
mapellil 8:1b5c28fe5e94 41 }
mapellil 8:1b5c28fe5e94 42
mapellil 8:1b5c28fe5e94 43 while(1)
mapellil 8:1b5c28fe5e94 44 {
mapellil 8:1b5c28fe5e94 45 wait(1);
mapellil 8:1b5c28fe5e94 46 myled = !myled;
mapellil 8:1b5c28fe5e94 47 }
mapellil 8:1b5c28fe5e94 48 }
mapellil 8:1b5c28fe5e94 49
mapellil 8:1b5c28fe5e94 50 #else
mapellil 8:1b5c28fe5e94 51
donatien 0:0e0debc29569 52 #include "mbed.h"
mapellil 3:6e7a93483c12 53 //#include "EthernetInterface.h"
mapellil 3:6e7a93483c12 54 #include "TCPSocket.h"
donatien 0:0e0debc29569 55 #include "HTTPClient.h"
donatien 0:0e0debc29569 56
mapellil 3:6e7a93483c12 57 #ifdef LICIO
mapellil 3:6e7a93483c12 58
mapellil 3:6e7a93483c12 59 #else
donatien 1:d263603373ac 60 EthernetInterface eth;
mapellil 3:6e7a93483c12 61 #endif
mapellil 3:6e7a93483c12 62
donatien 1:d263603373ac 63 char str[512];
donatien 1:d263603373ac 64
donatien 0:0e0debc29569 65 int main()
donatien 0:0e0debc29569 66 {
mapellil 3:6e7a93483c12 67 #ifdef LICIO
mapellil 8:1b5c28fe5e94 68 SpwfSAInterface spwf(D8, D2, false);
mapellil 8:1b5c28fe5e94 69 spwf.connect("crespan","Elfrontal1", NSAPI_SECURITY_WPA2);
donatien 0:0e0debc29569 70
mapellil 8:1b5c28fe5e94 71 HTTPClient http(spwf);
mapellil 3:6e7a93483c12 72 #else
mapellil 3:6e7a93483c12 73 eth.init(); //Use DHCP
donatien 0:0e0debc29569 74 eth.connect();
mapellil 3:6e7a93483c12 75 #endif
mapellil 3:6e7a93483c12 76 int ret;
donatien 0:0e0debc29569 77
donatien 0:0e0debc29569 78 //GET data
mapellil 5:526c0df8cbff 79 printf("\nTrying to fetch page...\n\r");
mapellil 3:6e7a93483c12 80 ret = http.get("http://mbed.org/media/uploads/donatien/hello.txt", str, 128, HTTP_CLIENT_DEFAULT_TIMEOUT);
mapellil 3:6e7a93483c12 81 // ret = http.get("http://httpstat.us", str, 128, HTTP_CLIENT_DEFAULT_TIMEOUT);
donatien 0:0e0debc29569 82 if (!ret)
donatien 0:0e0debc29569 83 {
mapellil 5:526c0df8cbff 84 printf("Page fetched successfully - read %d characters\n\r", strlen(str));
donatien 0:0e0debc29569 85 printf("Result: %s\n", str);
donatien 0:0e0debc29569 86 }
donatien 0:0e0debc29569 87 else
donatien 0:0e0debc29569 88 {
mapellil 5:526c0df8cbff 89 printf("Error - ret = %d - HTTP return code = %d\n\r", ret, http.getHTTPResponseCode());
donatien 0:0e0debc29569 90 }
mapellil 8:1b5c28fe5e94 91
donatien 0:0e0debc29569 92 //POST data
donatien 0:0e0debc29569 93 HTTPMap map;
donatien 2:270e2d0bb85a 94 HTTPText inText(str, 512);
donatien 0:0e0debc29569 95 map.put("Hello", "World");
donatien 0:0e0debc29569 96 map.put("test", "1234");
mapellil 5:526c0df8cbff 97 printf("\nTrying to post data...\n\r");
mapellil 3:6e7a93483c12 98 ret = http.post("http://httpbin.org/post", map, &inText, HTTP_CLIENT_DEFAULT_TIMEOUT);
mapellil 3:6e7a93483c12 99 // ret = http.post("http://posttestserver.com/post.php", map, &inText, HTTP_CLIENT_DEFAULT_TIMEOUT);
donatien 0:0e0debc29569 100 if (!ret)
donatien 0:0e0debc29569 101 {
mapellil 5:526c0df8cbff 102 printf("Executed POST successfully - read %d characters\n\r", strlen(str));
mapellil 5:526c0df8cbff 103 printf("Result: %s\n\r", str);
donatien 0:0e0debc29569 104 }
donatien 0:0e0debc29569 105 else
donatien 0:0e0debc29569 106 {
mapellil 5:526c0df8cbff 107 printf("Error - ret = %d - HTTP return code = %d\n\r", ret, http.getHTTPResponseCode());
donatien 0:0e0debc29569 108 }
donatien 0:0e0debc29569 109
donatien 2:270e2d0bb85a 110 //PUT data
donatien 2:270e2d0bb85a 111 strcpy(str, "This is a PUT test!");
donatien 2:270e2d0bb85a 112 HTTPText outText(str);
donatien 2:270e2d0bb85a 113 //HTTPText inText(str, 512);
mapellil 5:526c0df8cbff 114 printf("\nTrying to put resource...\n\r");
donatien 2:270e2d0bb85a 115 ret = http.put("http://httpbin.org/put", outText, &inText);
donatien 2:270e2d0bb85a 116 if (!ret)
donatien 2:270e2d0bb85a 117 {
mapellil 5:526c0df8cbff 118 printf("Executed PUT successfully - read %d characters\n\r", strlen(str));
mapellil 5:526c0df8cbff 119 printf("Result: %s\n\r", str);
donatien 2:270e2d0bb85a 120 }
donatien 2:270e2d0bb85a 121 else
donatien 2:270e2d0bb85a 122 {
mapellil 5:526c0df8cbff 123 printf("Error - ret = %d - HTTP return code = %d\n\r", ret, http.getHTTPResponseCode());
donatien 2:270e2d0bb85a 124 }
donatien 2:270e2d0bb85a 125
donatien 2:270e2d0bb85a 126 //DELETE data
donatien 2:270e2d0bb85a 127 //HTTPText inText(str, 512);
mapellil 5:526c0df8cbff 128 printf("\nTrying to delete resource...\n\r");
donatien 2:270e2d0bb85a 129 ret = http.del("http://httpbin.org/delete", &inText);
donatien 2:270e2d0bb85a 130 if (!ret)
donatien 2:270e2d0bb85a 131 {
mapellil 5:526c0df8cbff 132 printf("Executed DELETE successfully - read %d characters\n\r", strlen(str));
mapellil 5:526c0df8cbff 133 printf("Result: %s\n\r", str);
donatien 2:270e2d0bb85a 134 }
donatien 2:270e2d0bb85a 135 else
donatien 2:270e2d0bb85a 136 {
donatien 2:270e2d0bb85a 137 printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
donatien 2:270e2d0bb85a 138 }
donatien 2:270e2d0bb85a 139
mapellil 3:6e7a93483c12 140 // eth.disconnect();
donatien 0:0e0debc29569 141
donatien 0:0e0debc29569 142 while(1) {
donatien 0:0e0debc29569 143 }
donatien 0:0e0debc29569 144 }
mapellil 8:1b5c28fe5e94 145 #endif