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:
- 64:a3dc04daaa2a
- Parent:
- 58:4aeb931b8475
- Child:
- 72:47ae7d8d7321
diff -r 6b43e0875dbc -r a3dc04daaa2a main.cpp --- a/main.cpp Mon Oct 22 09:15:04 2018 +0100 +++ b/main.cpp Wed Oct 24 15:45:03 2018 +0100 @@ -9,7 +9,7 @@ int rcount; char *p; char *buffer = new char[256]; - nsapi_size_or_error_t r; + nsapi_size_or_error_t result; // Bring up the ethernet interface printf("Mbed OS Socket example\n"); @@ -25,10 +25,10 @@ return 0; } - r = net->connect(); - if (r != 0) { - printf("Error! net->connect() returned: %d\n", r); - return r; + result = net->connect(); + if (result != 0) { + printf("Error! net->connect() returned: %d\n", result); + return result; } // Show the network address @@ -39,48 +39,48 @@ 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 + // Open a socket on the network interface, and create a TCP connection to api.ipify.org TCPSocket socket; // Send a simple http request char sbuffer[] = "GET / HTTP/1.1\r\nHost: api.ipify.org\r\nConnection: close\r\n\r\n"; nsapi_size_t size = strlen(sbuffer); - r = socket.open(net); - if (r != 0) { - printf("Error! socket.open() returned: %d\n", r); + result = socket.open(net); + if (result != 0) { + printf("Error! socket.open() returned: %d\n", result); } - r = socket.connect("api.ipify.org", 80); - if (r != 0) { - printf("Error! socket.connect() returned: %d\n", r); + result = socket.connect("api.ipify.org", 80); + if (result != 0) { + printf("Error! socket.connect() returned: %d\n", result); goto DISCONNECT; } - // Loop until whole request send + // Loop until whole request sent while(size) { - r = socket.send(sbuffer+r, size); - if (r < 0) { - printf("Error! socket.send() returned: %d\n", r); + result = socket.send(sbuffer+result, size); + if (result < 0) { + printf("Error! socket.send() returned: %d\n", result); goto DISCONNECT; } - size -= r; - printf("sent %d [%.*s]\n", r, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); + size -= result; + printf("sent %d [%.*s]\n", result, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); } // Receieve an HTTP response and print out the response line remaining = 256; rcount = 0; p = buffer; - while (0 < (r = socket.recv(p, remaining))) { - p += r; - rcount += r; - remaining -= r; + while (0 < (result = socket.recv(p, remaining))) { + p += result; + rcount += result; + remaining -= result; } - if (r < 0) { - printf("Error! socket.recv() returned: %d\n", r); + if (result < 0) { + printf("Error! socket.recv() returned: %d\n", result); goto DISCONNECT; } - + // the HTTP response code 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