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.
Diff: main.cpp
- 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();