A HTTP Client for the mbed networking libraries with HTTPFile for use with latest networking stack

Fork of HTTPClient by Donatien Garnier

An extension of the HTTPClient that adds HTTPFile. Currently on get is support and only works when getting binary files.

HTTPFile data("/local/firm.bin");
HTTPResult r = client.get("https://217.140.101.20/media/uploads/ollie8/firm.bin", &data);
if (r == HTTP_OK) {
                            
}
Committer:
donatien
Date:
Fri Jun 29 11:05:21 2012 +0000
Revision:
7:4e39864f7b15
Parent:
5:791fc3dcb6c4
Child:
10:e1351de84c16
Update to using new C++ Socket API

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:2ccb9960a044 1 /* HTTPClient.h */
donatien 0:2ccb9960a044 2 /*
donatien 0:2ccb9960a044 3 Copyright (C) 2012 ARM Limited.
donatien 0:2ccb9960a044 4
donatien 0:2ccb9960a044 5 Permission is hereby granted, free of charge, to any person obtaining a copy of
donatien 0:2ccb9960a044 6 this software and associated documentation files (the "Software"), to deal in
donatien 0:2ccb9960a044 7 the Software without restriction, including without limitation the rights to
donatien 0:2ccb9960a044 8 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
donatien 0:2ccb9960a044 9 of the Software, and to permit persons to whom the Software is furnished to do
donatien 0:2ccb9960a044 10 so, subject to the following conditions:
donatien 0:2ccb9960a044 11
donatien 0:2ccb9960a044 12 The above copyright notice and this permission notice shall be included in all
donatien 0:2ccb9960a044 13 copies or substantial portions of the Software.
donatien 0:2ccb9960a044 14
donatien 0:2ccb9960a044 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
donatien 0:2ccb9960a044 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
donatien 0:2ccb9960a044 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
donatien 0:2ccb9960a044 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
donatien 0:2ccb9960a044 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 0:2ccb9960a044 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
donatien 0:2ccb9960a044 21 SOFTWARE.
donatien 0:2ccb9960a044 22 */
donatien 0:2ccb9960a044 23
donatien 0:2ccb9960a044 24 /** \file
donatien 0:2ccb9960a044 25 HTTP Client header file
donatien 0:2ccb9960a044 26 */
donatien 0:2ccb9960a044 27
donatien 0:2ccb9960a044 28 #ifndef HTTP_CLIENT_H
donatien 0:2ccb9960a044 29 #define HTTP_CLIENT_H
donatien 0:2ccb9960a044 30
donatien 7:4e39864f7b15 31 #include "TCPSocket.h"
donatien 0:2ccb9960a044 32
donatien 0:2ccb9960a044 33 #define HTTP_CLIENT_DEFAULT_TIMEOUT 4000
donatien 0:2ccb9960a044 34
donatien 0:2ccb9960a044 35 class HTTPData;
donatien 0:2ccb9960a044 36
donatien 0:2ccb9960a044 37 #include "IHTTPData.h"
donatien 0:2ccb9960a044 38 #include "mbed.h"
donatien 0:2ccb9960a044 39
donatien 0:2ccb9960a044 40 ///HTTP client results
donatien 0:2ccb9960a044 41 enum HTTPResult
donatien 0:2ccb9960a044 42 {
donatien 0:2ccb9960a044 43 HTTP_OK, ///<Success
donatien 0:2ccb9960a044 44 HTTP_PROCESSING, ///<Processing
donatien 0:2ccb9960a044 45 HTTP_PARSE, ///<url Parse error
donatien 0:2ccb9960a044 46 HTTP_DNS, ///<Could not resolve name
donatien 0:2ccb9960a044 47 HTTP_PRTCL, ///<Protocol error
donatien 0:2ccb9960a044 48 HTTP_NOTFOUND, ///<HTTP 404 Error
donatien 0:2ccb9960a044 49 HTTP_REFUSED, ///<HTTP 403 Error
donatien 0:2ccb9960a044 50 HTTP_ERROR, ///<HTTP xxx error
donatien 0:2ccb9960a044 51 HTTP_TIMEOUT, ///<Connection timeout
donatien 0:2ccb9960a044 52 HTTP_CONN ///<Connection error
donatien 0:2ccb9960a044 53 };
donatien 0:2ccb9960a044 54
donatien 0:2ccb9960a044 55 /**A simple HTTP Client
donatien 0:2ccb9960a044 56 The HTTPClient is composed of:
donatien 0:2ccb9960a044 57 - The actual client (HTTPClient)
donatien 0:2ccb9960a044 58 - Classes that act as a data repository, each of which deriving from the HTTPData class (HTTPText for short text content, HTTPFile for file I/O, HTTPMap for key/value pairs, and HTTPStream for streaming purposes)
donatien 0:2ccb9960a044 59 */
donatien 0:2ccb9960a044 60 class HTTPClient
donatien 0:2ccb9960a044 61 {
donatien 0:2ccb9960a044 62 public:
donatien 0:2ccb9960a044 63 ///Instantiate the HTTP client
donatien 0:2ccb9960a044 64 HTTPClient();
donatien 0:2ccb9960a044 65 ~HTTPClient();
donatien 0:2ccb9960a044 66
donatien 0:2ccb9960a044 67 #if 0 //TODO add header handlers
donatien 0:2ccb9960a044 68 /**
donatien 0:2ccb9960a044 69 Provides a basic authentification feature (Base64 encoded username and password)
donatien 0:2ccb9960a044 70 Pass two NULL pointers to switch back to no authentication
donatien 0:2ccb9960a044 71 @param user username to use for authentication, must remain valid durlng the whole HTTP session
donatien 0:2ccb9960a044 72 @param user password to use for authentication, must remain valid durlng the whole HTTP session
donatien 0:2ccb9960a044 73 */
donatien 0:2ccb9960a044 74 void basicAuth(const char* user, const char* password); //Basic Authentification
donatien 0:2ccb9960a044 75 #endif
donatien 0:2ccb9960a044 76
donatien 0:2ccb9960a044 77 //High Level setup functions
donatien 0:2ccb9960a044 78 /** Execute a GET request on the url
donatien 0:2ccb9960a044 79 Blocks until completion
donatien 0:2ccb9960a044 80 @param url : url on which to execute the request
donatien 0:2ccb9960a044 81 @param pDataIn : pointer to an IHTTPDataIn instance that will collect the data returned by the request, can be NULL
donatien 0:2ccb9960a044 82 @param timeout waiting timeout in ms (osWaitForever for blocking function, not recommended)
donatien 0:2ccb9960a044 83 @return 0 on success, NET error (<0) on failure
donatien 0:2ccb9960a044 84 */
donatien 0:2ccb9960a044 85 int get(const char* url, IHTTPDataIn* pDataIn, uint32_t timeout = HTTP_CLIENT_DEFAULT_TIMEOUT); //Blocking
donatien 0:2ccb9960a044 86
donatien 0:2ccb9960a044 87 /** Execute a GET request on the url
donatien 0:2ccb9960a044 88 Blocks until completion
donatien 0:2ccb9960a044 89 This is a helper to directly get a piece of text from a HTTP result
donatien 0:2ccb9960a044 90 @param url : url on which to execute the request
donatien 0:2ccb9960a044 91 @param result : pointer to a char array in which the result will be stored
donatien 0:2ccb9960a044 92 @param maxResultLen : length of the char array (including space for the NULL-terminating char)
donatien 0:2ccb9960a044 93 @param timeout waiting timeout in ms (osWaitForever for blocking function, not recommended)
donatien 0:2ccb9960a044 94 @return 0 on success, NET error on failure
donatien 0:2ccb9960a044 95 */
donatien 0:2ccb9960a044 96 int get(const char* url, char* result, size_t maxResultLen, uint32_t timeout = HTTP_CLIENT_DEFAULT_TIMEOUT); //Blocking
donatien 0:2ccb9960a044 97
donatien 0:2ccb9960a044 98 /** Execute a POST request on the url
donatien 0:2ccb9960a044 99 Blocks until completion
donatien 0:2ccb9960a044 100 @param url : url on which to execute the request
donatien 0:2ccb9960a044 101 @param dataOut : a IHTTPDataOut instance that contains the data that will be posted
donatien 0:2ccb9960a044 102 @param pDataIn : pointer to an IHTTPDataIn instance that will collect the data returned by the request, can be NULL
donatien 0:2ccb9960a044 103 @param timeout waiting timeout in ms (osWaitForever for blocking function, not recommended)
donatien 0:2ccb9960a044 104 @return 0 on success, NET error on failure
donatien 0:2ccb9960a044 105 */
donatien 0:2ccb9960a044 106 int post(const char* url, const IHTTPDataOut& dataOut, IHTTPDataIn* pDataIn, uint32_t timeout = HTTP_CLIENT_DEFAULT_TIMEOUT); //Blocking
donatien 0:2ccb9960a044 107
donatien 0:2ccb9960a044 108 /** Get last request's HTTP response code
donatien 0:2ccb9960a044 109 @return The HTTP response code of the last request
donatien 0:2ccb9960a044 110 */
donatien 0:2ccb9960a044 111 int getHTTPResponseCode();
donatien 0:2ccb9960a044 112
donatien 0:2ccb9960a044 113 private:
donatien 0:2ccb9960a044 114 enum HTTP_METH
donatien 0:2ccb9960a044 115 {
donatien 0:2ccb9960a044 116 HTTP_GET,
donatien 0:2ccb9960a044 117 HTTP_POST,
donatien 0:2ccb9960a044 118 HTTP_HEAD
donatien 0:2ccb9960a044 119 };
donatien 0:2ccb9960a044 120
donatien 0:2ccb9960a044 121 int connect(const char* url, HTTP_METH method, IHTTPDataOut* pDataOut, IHTTPDataIn* pDataIn, uint32_t timeout); //Execute request
donatien 0:2ccb9960a044 122 int recv(char* buf, size_t minLen, size_t maxLen, size_t* pReadLen); //0 on success, err code on failure
donatien 0:2ccb9960a044 123 int send(char* buf, size_t len = 0); //0 on success, err code on failure
donatien 0:2ccb9960a044 124 int parseURL(const char* url, char* scheme, size_t maxSchemeLen, char* host, size_t maxHostLen, uint16_t* port, char* path, size_t maxPathLen); //Parse URL
donatien 0:2ccb9960a044 125
donatien 0:2ccb9960a044 126 //Parameters
donatien 7:4e39864f7b15 127 TCPSocket m_sock;
donatien 7:4e39864f7b15 128
donatien 0:2ccb9960a044 129 uint32_t m_timeout;
donatien 0:2ccb9960a044 130
donatien 0:2ccb9960a044 131 const char* m_basicAuthUser;
donatien 0:2ccb9960a044 132 const char* m_basicAuthPassword;
donatien 0:2ccb9960a044 133 int m_httpResponseCode;
donatien 0:2ccb9960a044 134
donatien 0:2ccb9960a044 135 };
donatien 0:2ccb9960a044 136
donatien 0:2ccb9960a044 137 //Including data containers here for more convenience
donatien 0:2ccb9960a044 138 #include "data/HTTPText.h"
donatien 0:2ccb9960a044 139 #include "data/HTTPMap.h"
donatien 0:2ccb9960a044 140
donatien 0:2ccb9960a044 141 #endif