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.
main.cpp@4:99746155e2ef, 2013-09-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |