Connect to twitter.com and copies this webpage to a file.

Dependencies:   EthernetInterface3 HTTPSClient TLS_axTLS mbed-rtos mbed

This example shows how to use the HTTPSClient library by copying the content of this webpage to a file. Before running this program, you must download these certificates and copy them to the mbed. After running this program, a file called index.htm has been created and you can open it with your favorite browser to display the webpage the mbed have just downloaded.

Committer:
feb11
Date:
Thu Sep 12 15:42:15 2013 +0000
Revision:
4:99746155e2ef
Parent:
3:6d25972a1b21
rename TLS lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
feb11 2:e3807a060fa5 1 /*
feb11 2:e3807a060fa5 2 This examples shows how to use the HTTPS library
feb11 2:e3807a060fa5 3 in order to download a webpage from twitter.com
feb11 2:e3807a060fa5 4
feb11 2:e3807a060fa5 5 Don't forget to download certificates and copy on
feb11 2:e3807a060fa5 6 your mbed before running this program. You can
feb11 2:e3807a060fa5 7 download them from this link:
feb11 2:e3807a060fa5 8 http://mbed.org/media/uploads/feb11/certificates-twitter.zip
feb11 2:e3807a060fa5 9 */
feb11 3:6d25972a1b21 10
feb11 0:d6829ea0374e 11 #include "mbed.h"
feb11 0:d6829ea0374e 12 #include "EthernetInterface.h"
feb11 0:d6829ea0374e 13 #include "CertificateManager.h"
feb11 0:d6829ea0374e 14 #include "HTTPSClient.h"
feb11 3:6d25972a1b21 15
feb11 1:ff73b1545aaa 16 const char host[] = "twitter.com";
feb11 2:e3807a060fa5 17 const char request[] = "https://twitter.com";
feb11 0:d6829ea0374e 18 LocalFileSystem local("local");
feb11 3:6d25972a1b21 19
feb11 0:d6829ea0374e 20 int main()
feb11 0:d6829ea0374e 21 {
feb11 1:ff73b1545aaa 22 set_time(1378370406);
feb11 2:e3807a060fa5 23
feb11 2:e3807a060fa5 24 /* Starting Ethernet */
feb11 0:d6829ea0374e 25 EthernetInterface eth;
feb11 0:d6829ea0374e 26 if(eth.init() || eth.connect())
feb11 0:d6829ea0374e 27 {
feb11 0:d6829ea0374e 28 printf("Error with EthernetInterface\n\r");
feb11 0:d6829ea0374e 29 return -1;
feb11 0:d6829ea0374e 30 }
feb11 3:6d25972a1b21 31
feb11 2:e3807a060fa5 32 /* Loading certificates in precomputed mode */
feb11 0:d6829ea0374e 33 CertificateManager::add("/local/cert1.der");
feb11 0:d6829ea0374e 34 CertificateManager::add("/local/cert2.der");
feb11 0:d6829ea0374e 35 CertificateManager::add("/local/cert3.der");
feb11 0:d6829ea0374e 36 if(!CertificateManager::load(true))
feb11 0:d6829ea0374e 37 {
feb11 0:d6829ea0374e 38 printf("Failed to load certificates\n");
feb11 0:d6829ea0374e 39 return -1;
feb11 0:d6829ea0374e 40 }
feb11 3:6d25972a1b21 41
feb11 2:e3807a060fa5 42 /* Now, let's connect to twitter.com */
feb11 0:d6829ea0374e 43 HTTPSClient client;
feb11 0:d6829ea0374e 44 if(!client.connect(host))
feb11 0:d6829ea0374e 45 {
feb11 0:d6829ea0374e 46 printf("Failed to connect to %s\n", host);
feb11 0:d6829ea0374e 47 return -1;
feb11 0:d6829ea0374e 48 }
feb11 1:ff73b1545aaa 49 printf("Connected to %s !\n", host);
feb11 2:e3807a060fa5 50
feb11 2:e3807a060fa5 51 /* Don't forget to call this method, it's an
feb11 2:e3807a060fa5 52 easy way to free a few KB of memory */
feb11 1:ff73b1545aaa 53 CertificateManager::clear();
feb11 0:d6829ea0374e 54
feb11 2:e3807a060fa5 55
feb11 2:e3807a060fa5 56 /* Let's send our GET request to get the webpage */
feb11 0:d6829ea0374e 57 char buffer[256];
feb11 2:e3807a060fa5 58 int bufferLength = sizeof(buffer);
feb11 0:d6829ea0374e 59 HTTPHeader header;
feb11 0:d6829ea0374e 60 int read = client.get(request, &header, buffer, bufferLength);
feb11 0:d6829ea0374e 61 if(header.getStatus() != HTTP_OK || read < 0)
feb11 0:d6829ea0374e 62 {
feb11 0:d6829ea0374e 63 printf("Failed sending GET request : %s to %s", request, host);
feb11 0:d6829ea0374e 64 return -1;
feb11 0:d6829ea0374e 65 }
feb11 0:d6829ea0374e 66
feb11 2:e3807a060fa5 67 /* index.htm is used to store the webpage */
feb11 1:ff73b1545aaa 68 FILE *fp = fopen("/local/index.htm", "w");
feb11 1:ff73b1545aaa 69 if(fp == NULL)
feb11 1:ff73b1545aaa 70 {
feb11 1:ff73b1545aaa 71 printf("Failed to open file index.htm\n");
feb11 1:ff73b1545aaa 72 return -1;
feb11 1:ff73b1545aaa 73 }
feb11 2:e3807a060fa5 74 fwrite(buffer, 1, read, fp); // writing the first part of the body
feb11 2:e3807a060fa5 75
feb11 0:d6829ea0374e 76 int totalRead = read;
feb11 0:d6829ea0374e 77 while(totalRead < header.getBodyLength())
feb11 0:d6829ea0374e 78 {
feb11 0:d6829ea0374e 79 if(bufferLength > header.getBodyLength() - totalRead)
feb11 0:d6829ea0374e 80 bufferLength = header.getBodyLength() - totalRead;
feb11 0:d6829ea0374e 81
feb11 2:e3807a060fa5 82 /* This function does not send a get request but instead
feb11 2:e3807a060fa5 83 just receive data from the host.
feb11 2:e3807a060fa5 84 */
feb11 0:d6829ea0374e 85 read = client.get("", NULL, buffer, bufferLength);
feb11 1:ff73b1545aaa 86 if(read < 0)
feb11 1:ff73b1545aaa 87 {
feb11 1:ff73b1545aaa 88 printf("Error while getting data from %s\n", host);
feb11 1:ff73b1545aaa 89 return -1;
feb11 1:ff73b1545aaa 90 }
feb11 2:e3807a060fa5 91 fwrite(buffer, 1, read, fp);
feb11 0:d6829ea0374e 92 totalRead += read;
feb11 0:d6829ea0374e 93 }
feb11 3:6d25972a1b21 94
feb11 2:e3807a060fa5 95 /* We're done, let's close everything */
feb11 1:ff73b1545aaa 96 fclose(fp);
feb11 0:d6829ea0374e 97 printf("Disconnecting from %s\n", host);
feb11 0:d6829ea0374e 98 client.disconnect();
feb11 0:d6829ea0374e 99 eth.disconnect();
feb11 0:d6829ea0374e 100
feb11 0:d6829ea0374e 101 return 0;
feb11 3:6d25972a1b21 102 }