Demo having the purpose to provide some examples about HTTP and HTTPS procedures.
Dependencies: C027_Support mbed
This demo has the purpose to provide some examples about HTTP and HTTPS procedures.
In details are implemented the following actions referring freely available online services:
- HTTP and HTTPS HEAD command -> www.developer.mbed.org
- HTTP and HTTPS GET command -> www.developer.mbed.org
- HTTP and HTTPS DELETE command -> www.httpbin.org
- HTTP and HTTPS PUT command -> www.httpbin.org
- HTTP and HTTPS POST file command -> www.posttestserver.com
- HTTP and HTTPS POST data command -> www.posttestserver.com
Please don't use confidential data when trying out the reported examples.
As default, the httpInData variable is set to "Hello World" (see source code).
Revision 0:c25f7731ecc3, committed 2016-01-22
- Comitter:
- fdilenarda
- Date:
- Fri Jan 22 14:17:13 2016 +0000
- Commit message:
- Initial commit.
Changed in this revision
diff -r 000000000000 -r c25f7731ecc3 C027_Support.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C027_Support.lib Fri Jan 22 14:17:13 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/ublox/code/C027_Support/#cbccf4052d45
diff -r 000000000000 -r c25f7731ecc3 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jan 22 14:17:13 2016 +0000 @@ -0,0 +1,366 @@ +#include "mbed.h" + +//------------------------------------------------------------------------------------ +/* This demo has the purpose to provide some examples about HTTP procedures. + In details are implemented the following actions referring freely available online services: + + - HTTP and HTTPS HEAD command -> www.developer.mbed.org + - HTTP and HTTPS GET command -> www.developer.mbed.org + - HTTP and HTTPS DELETE command -> www.httpbin.org + - HTTP and HTTPS PUT command -> www.httpbin.org + - HTTP and HTTPS POST file command -> www.posttestserver.com + - HTTP and HTTPS POST data command -> www.posttestserver.com + + P.S.: Please don't use confidential data when trying out the reported examples. + As default, the httpInData variable is set to "Hello World" (see below). +*/ +#include "MDM.h" +//------------------------------------------------------------------------------------ +// You need to configure these cellular modem / SIM parameters. +// These parameters are ignored for LISA-C200 variants and can be left NULL. +//------------------------------------------------------------------------------------ +//! Set your secret SIM pin here (e.g. "1234"). Check your SIM manual. +#define SIMPIN NULL +/*! The APN of your network operator SIM, sometimes it is "internet" check your + contract with the network operator. You can also try to look-up your settings in + google: https://www.google.de/search?q=APN+list */ +#define APN NULL +//! Set the user name for your APN, or NULL if not needed +#define USERNAME NULL +//! Set the password for your APN, or NULL if not needed +#define PASSWORD NULL +//------------------------------------------------------------------------------------ +// You need to configure the buffer data size +//------------------------------------------------------------------------------------ +//! Set the buffer size to 2048 bytes +//#define LARGE_DATA +//! Set the buffer size to 1024 bytes +#define MEDIUM_DATA +//------------------------------------------------------------------------------------ + +int main(void) +{ + int ret; +#if defined(LARGE_DATA) + printf("Set the buffer size to 2048 bytes\r\n"); + char buf[2048] = ""; +#elif defined(MEDIUM_DATA) + printf("Set the buffer size to 1024 bytes\r\n"); + char buf[1024] = ""; +#else + printf("Set the buffer size to 512 bytes\r\n"); + char buf[512] = ""; +#endif + //give time to module for powering up (ms) + wait_ms(1000); + // Create the modem object + MDMSerial mdm; + //mdm.setDebug(4); // enable this for debugging issues + // initialize the modem + MDMParser::DevStatus devStatus = {}; + MDMParser::NetStatus netStatus = {}; + bool mdmOk = mdm.init(SIMPIN, &devStatus); + mdm.dumpDevStatus(&devStatus); + if (mdmOk) { +#if 0 + // file system API + const char* filename = "File"; + char buf[] = "Hello World"; + printf("writeFile \"%s\"\r\n", buf); + if (mdm.writeFile(filename, buf, sizeof(buf))) + { + memset(buf, 0, sizeof(buf)); + int len = mdm.readFile(filename, buf, sizeof(buf)); + if (len >= 0) + printf("readFile %d \"%.*s\"\r\n", len, len, buf); + mdm.delFile(filename); + } +#endif + + // wait until we are connected + mdmOk = mdm.registerNet(&netStatus); + mdm.dumpNetStatus(&netStatus); + } + if (mdmOk) + { + // http://www.geckobeach.com/cellular/secrets/gsmcodes.php + // http://de.wikipedia.org/wiki/USSD-Codes + const char* ussd = "*130#"; // You may get answer "UNKNOWN APPLICATION" + printf("Ussd Send Command %s\r\n", ussd); + ret = mdm.ussdCommand(ussd, buf); + if (ret > 0) + printf("Ussd Got Answer: \"%*s\"\r\n", ret, buf); + + // join the internet connection + MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD); + if (ip != NOIP) + { + mdm.dumpIp(ip); + + printf("HTTP and HTTPS management\r\n"); + char httpInData[] = "Hello World"; //input data for some HTTP commands + char httpInFile[48] = "http_in.txt"; //file where saving HTTP commands data + char httpOutFile[48] = "http_out.txt"; //file where saving HTTP commands results + + int httpProfile = mdm.httpFindProfile(); //get the HTTP profile identifier + if (httpProfile >= 0) + { + printf("Make an HTTP and HTTPS HEAD Request\r\n"); + if(mdm.httpResetProfile(httpProfile)) + { + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SERVER_NAME,"developer.mbed.org")) + { + mdm.httpSetBlocking(httpProfile, 10000); //timeout is 10000 ms: not blocking procedure + + //HTTP HEAD command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_HEAD, + "/media/uploads/mbed_official/hello.txt", + httpOutFile,NULL,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTP HEAD result \"%*s\"\r\n", ret, buf); + + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SECURE,"1")) //HTTP Secure option enabled + { + //HTTPS HEAD command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_HEAD, + "/media/uploads/mbed_official/hello.txt", + httpOutFile,NULL,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTPS HEAD result \"%*s\"\r\n", ret, buf); + } else { + printf("Abnormal condition during the set of HTTP secure option\r\n"); + } + + //delete the HTTP output file + mdm.delFile(httpOutFile); + } else { + printf("Abnormal condition during the set of the HTTP server name\r\n"); + } + } else { + printf("Abnormal condition during the reset of HTTP profile %d\r\n", httpProfile); + } + + printf("Make an HTTP and HTTPS GET Request\r\n"); + if(mdm.httpResetProfile(httpProfile)) + { + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SERVER_NAME,"developer.mbed.org")) + { + mdm.httpSetBlocking(httpProfile, 10000); //timeout is 10000 ms: not blocking procedure + + //HTTP GET command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_GET, + "/media/uploads/mbed_official/hello.txt", + httpOutFile,NULL,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTP GET result \"%*s\"\r\n", ret, buf); + + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SECURE,"1")) //HTTP Secure option enabled + { + //HTTPS GET command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_GET, + "/media/uploads/mbed_official/hello.txt", + httpOutFile,NULL,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTPS GET result \"%*s\"\r\n", ret, buf); + } else { + printf("Abnormal condition during the set of HTTP secure option\r\n"); + } + + //delete the HTTP output file + mdm.delFile(httpOutFile); + } else { + printf("Abnormal condition during the set of the HTTP server name\r\n"); + } + } else { + printf("Abnormal condition during the reset of HTTP profile %d\r\n", httpProfile); + } + + printf("Make an HTTP and HTTPS DELETE Request\r\n"); + if(mdm.httpResetProfile(httpProfile)) + { + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SERVER_NAME,"httpbin.org")) + { + mdm.httpSetBlocking(httpProfile, 10000); //timeout is 10000 ms: not blocking procedure + + //HTTP DELETE command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_DELETE,"/delete", \ + httpOutFile,NULL,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTP DELETE result \"%*s\"\r\n", ret, buf); + + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SECURE,"1")) //HTTP Secure option enabled + { + //HTTPS DELETE command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_DELETE,"/delete", \ + httpOutFile,NULL,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTPS DELETE result \"%*s\"\r\n", ret, buf); + } else { + printf("Abnormal condition during the set of HTTP secure option\r\n"); + } + + //delete the HTTP output file + mdm.delFile(httpOutFile); + + } else { + printf("Abnormal condition during the set of the HTTP server name\r\n"); + } + } else { + printf("Abnormal condition during the reset of HTTP profile %d\r\n", httpProfile); + } + + printf("Make an HTTP and HTTPS PUT Request\r\n"); + if(mdm.httpResetProfile(httpProfile)) + { + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SERVER_NAME,"httpbin.org")) + { + if(mdm.writeFile(httpInFile,httpInData,sizeof(httpInData))) + { + mdm.httpSetBlocking(httpProfile, 10000); //timeout is 10000 ms: not blocking procedure + + //HTTP PUT command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_PUT,"/put", \ + httpOutFile,httpInFile,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTP PUT result \"%*s\"\r\n", ret, buf); + + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SECURE,"1")) //HTTP Secure option enabled + { + //HTTPS PUT command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_PUT,"/put", \ + httpOutFile,httpInFile,NULL,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTPS PUT result \"%*s\"\r\n", ret, buf); + } else { + printf("Abnormal condition during the set of HTTP secure option\r\n"); + } + + //delete the HTTP input file + mdm.delFile(httpInFile); + + //delete the HTTP output file + mdm.delFile(httpOutFile); + } else { + printf("Abnormal condition during the writing of the HTTP input file\r\n"); + } + } else { + printf("Abnormal condition during the set of the HTTP server name\r\n"); + } + } else { + printf("Abnormal condition during the reset of HTTP profile %d\r\n", httpProfile); + } + + printf("Make an HTTP and HTTPS POST file command Request\r\n"); + if(mdm.httpResetProfile(httpProfile)) + { + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SERVER_NAME,"posttestserver.com")) + { + if(mdm.writeFile(httpInFile,httpInData,sizeof(httpInData))) + { + mdm.httpSetBlocking(httpProfile, 10000); //timeout is 10000 ms: not blocking procedure + + //HTTP POST file command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_POST_FILE,"/post.php", \ + httpOutFile,httpInFile,1,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTP POST file command result \"%*s\"\r\n", ret, buf); + + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SECURE,"1")) //HTTP Secure option enabled + { + //HTTPS POST file command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_POST_FILE,"/post.php", \ + httpOutFile,httpInFile,1,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTPS POST file command result \"%*s\"\r\n", ret, buf); + } else { + printf("Abnormal condition during the set of HTTP secure option\r\n"); + } + //delete the HTTP input file + mdm.delFile(httpInFile); + + //delete the HTTP output file + mdm.delFile(httpOutFile); + } else { + printf("Abnormal condition during the writing of the HTTP input file\r\n"); + } + } else { + printf("Abnormal condition during the set of the HTTP server name\r\n"); + } + } else { + printf("Abnormal condition during the reset of HTTP profile %d\r\n", httpProfile); + } + + printf("Make an HTTP and HTTPS POST data command Request\r\n"); + if(mdm.httpResetProfile(httpProfile)) + { + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SERVER_NAME,"posttestserver.com")) + { + if(mdm.writeFile(httpInFile,httpInData,sizeof(httpInData))) + { + mdm.httpSetBlocking(httpProfile, 10000); //timeout is 10000 ms: not blocking procedure + + //HTTP POST data command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_POST_DATA,"/post.php", \ + httpOutFile,httpInData,1,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTP POST data command result \"%*s\"\r\n", ret, buf); + + if (mdm.httpSetPar(httpProfile,MDMParser::HTTP_SECURE,"1")) //HTTP Secure option enabled + { + //HTTPS POST data command + ret = mdm.httpCommand(httpProfile,MDMParser::HTTP_POST_DATA,"/post.php", \ + httpOutFile,httpInData,1,NULL,buf,sizeof(buf)); + if (ret > 0) + printf("HTTPS POST data command result \"%*s\"\r\n", ret, buf); + } else { + printf("Abnormal condition during the set of HTTP secure option\r\n"); + } + + //delete the HTTP input file + mdm.delFile(httpInFile); + + //delete the HTTP output file + mdm.delFile(httpOutFile); + } else { + printf("Abnormal condition during the writing of the HTTP input file\r\n"); + } + } else { + printf("Abnormal condition during the set of the HTTP server name\r\n"); + } + } else { + printf("Abnormal condition during the reset of HTTP profile %d\r\n", httpProfile); + } + + //free current HTTP profile + mdm.httpFreeProfile(httpProfile); + } else { + printf("Abnormal condition: no available HTTP profiles\r\n"); + } + + // disconnect + mdm.disconnect(); + } + } + else + { + //in this case the mdmOk is set to false + printf("Please verify the SIM status and the network coverage\r\n"); + } + printf("Final loop: start\r\n"); + int maxLoops = 3; + const int wait = 1000; + for (int i=0; i < maxLoops; i++) + { + if (mdmOk) + { + // check the network status + if (mdm.checkNetStatus(&netStatus)) { + mdm.dumpNetStatus(&netStatus, fprintf, stdout); + } + } + wait_ms(wait); + } + printf("Final loop: end\r\n"); + mdm.powerOff(); + return 0; +}
diff -r 000000000000 -r c25f7731ecc3 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Jan 22 14:17:13 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/6f327212ef96 \ No newline at end of file