This is a quick example of a simple HTTP client program using the network-socket API that is provided as a part of mbed-os. The program brings up an underlying network interface, and uses it to perform an HTTP transaction over a TCPSocket.

Revision:
13:ed9e4aa00044
Parent:
12:2e7466eba9a3
Child:
40:afef93b6d854
--- a/main.cpp	Wed Mar 08 20:30:07 2017 +0000
+++ b/main.cpp	Wed Mar 08 22:00:06 2017 +0000
@@ -12,25 +12,34 @@
 
     // Show the network address
     const char *ip = net.get_ip_address();
-    printf("IP address is: %s\n", ip ? ip : "No IP");
+    const char *netmask = net.get_netmask();
+    const char *gateway = net.get_gateway();
+    printf("IP address: %s\n", ip ? ip : "None");
+    printf("Netmask: %s\n", netmask ? netmask : "None");
+    printf("Gateway: %s\n", gateway ? gateway : "None");
 
     // Open a socket on the network interface, and create a TCP connection to mbed.org
     TCPSocket socket;
     socket.open(&net);
-    socket.connect("developer.mbed.org", 80);
+    socket.connect("api.ipify.org", 80);
+    char *buffer = new char[256];
 
     // Send an HTTP request
-    char sbuffer[] = "GET / HTTP/1.1\r\nHost: developer.mbed.org\r\n\r\n";
-    int scount = socket.send(sbuffer, sizeof sbuffer);
-    printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+    strcpy(buffer, "GET / HTTP/1.1\r\nHost: api.ipify.org\r\n\r\n");
+    int scount = socket.send(buffer, strlen(buffer));
+    printf("sent %d [%.*s]\n", scount, strstr(buffer, "\r\n")-buffer, buffer);
 
-    // Receive an http response and print out the response line
-    char rbuffer[64];
-    int rcount = socket.recv(rbuffer, sizeof rbuffer);
-    printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
+    // Recieve an HTTP response and print out the response line
+    int rcount = socket.recv(buffer, 256);
+    printf("recv %d [%.*s]\n", rcount, strstr(buffer, "\r\n")-buffer, buffer);
+
+    // The api.ipify.org service also gives us the device's external IP address
+    const char *payload = strstr(buffer, "\r\n\r\n")+4;
+    printf("External IP address: %.*s\n", rcount-(payload-buffer), payload);
 
     // Close the socket to return its memory and bring down the network interface
     socket.close();
+    delete[] buffer;
 
     // Bring down the ethernet interface
     net.disconnect();