HTTPClient

Fork of HTTPClient by Donatien Garnier

Committer:
fangbao
Date:
Fri Oct 10 09:41:01 2014 +0000
Revision:
19:1211b05ba323
Parent:
16:1f743885e7de
Fix an issue: the server might send back "Access-Control-Allow-Credentials: true" in the Response Headers. The length of the key in that header is 33 bytes, which is larger than the size of the 'key' buffer (32 bytes).

Who changed what in which revision?

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