HTTP Client Data Containers
Data Containers¶
There are four containers included in the HTTPClient package:
- HTTPText
 - HTTPMap
 - HTTPFile
 - HTTPStream
 
You can also create your own by simply inheriting the HTTPData class.
HTTPText¶
This is a simple "Text" data repository.
Reference¶
Import program
    Public Member Functions | 
  |
| HTTPText (const string &encoding="text/html", int maxSize=DEFAULT_MAX_MEM_ALLOC) | |
| 
    Instantiates the object.
    
    
     | 
  |
| const char * | gets () const | 
| 
    Gets text.
    
    
     | 
  |
| void | puts (const char *str) | 
| 
    Sets the text in the container using a zero-terminated char*.
    
    
     | 
  |
| string & | get () | 
| 
    Gets text.
    
    
     | 
  |
| void | set (const string &str) | 
| 
    Puts text.
    
    
     | 
  |
| virtual void | clear () | 
| 
    Clears the content.
    
    
     | 
  |
    Friends | 
  |
| class | HTTPClient | 
Examples¶
The Working with the networking stack article's first example uses HTTPText.
HTTPMap¶
This class simplifies the use of key/value pairs requests and responses used widely among web APIs.
Inheritance¶
Note that HTTPMap inherits from std::map<std::string,std::string>. You can therefore use any public method of that class, including the square brackets operator ( [ ] ) to access a value.
Reference¶
Import program
    Public Member Functions | 
  |
| HTTPMap (const string &keyValueSep="=", const string &pairSep="&") | |
| 
    Instantiates map.
    
    
     | 
  |
| virtual void | clear () | 
| 
    Clears the content.
    
    
     | 
  |
    Friends | 
  |
| class | HTTPClient | 
Examples¶
The Twitter example uses HTTPMap.
HTTPFile¶
This is class provides file access/storage for HTTP requests and responses data payloads.
Reference¶
Import program
    Public Member Functions | 
  |
| HTTPFile (const char *path) | |
| 
    Instantiates data source/sink with file in param.
    
    
     | 
  |
| virtual void | clear () | 
| 
    Forces file closure.
    
    
     | 
  |
    Friends | 
  |
| class | HTTPClient | 
Examples¶
HTTPStream¶
This class allows you to stream data from the web using a persisting HTTP connection. To use it properly you must use a non-blocking HTTPClient method.
Reference¶
Import program
    Public Member Functions | 
  |
| HTTPStream () | |
| 
    Instantiates the object.
    
    
     | 
  |
| void | readNext (byte *buf, int size) | 
| 
    Starts to read into buffer.
    
    
     | 
  |
| bool | readable () | 
| 
    Returns whether there is data available to read.
    
    
     | 
  |
| int | readLen () | 
| 
    Returns the actual length of the payload written in the buffer.
    
    
     | 
  |
    Friends | 
  |
| class | HTTPClient | 
Examples¶
This example displays the Hackaday RSS feed while loading.
#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPClient.h"
EthernetNetIf eth; 
HTTPClient http;
HTTPResult result;
bool completed = false;
void request_callback(HTTPResult r)
{
  result = r;
  completed = true;
}
int main() {
  printf("Start\n");
  printf("Setting up...\n");
  EthernetErr ethErr = eth.setup();
  if(ethErr)
  {
    printf("Error %d in setup.\n", ethErr);
    return -1;
  }
  printf("Setup OK\n");
  
  HTTPStream stream;
  
  char BigBuf[512 + 1] = {0};
  stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read
  
  HTTPResult r = http.get("HTTP://hackaday.com/feed/", &stream, request_callback); //Load a very large page, such as the hackaday RSS feed
  
  while(!completed)
  {
    Net::poll(); //Polls the Networking stack
    if(stream.readable())
    {
      BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string
      printf("%s",BigBuf); //Display it while loading
      //Note: some servers do not like if you throttle them too much, so printf'ing during a request is generally bad practice
      stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it
    }
  }
  printf("\n--------------\n");
  if(result == HTTP_OK)
  {
    printf("Read completely\n"); 
  }
  else
  {
    printf("Error %d\n", result);
  }
  
  while(1)
  {
  
  }
  
  return 0;
  
}
You can import this program from here: http://mbed.org/users/donatien/programs/HTTPClientStreamingExample