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