![](/media/cache/group/ST_logo_2020_blue_V_cmyk.jpg.50x50_q85.jpg)
HTTP/HTTPS Client Library for the X-NUCLEO-IDW01M1v2 wifi board.
Dependents: HTTPClient_HelloWorld_IDW01M1 wifigianluigi HTTPClient_HelloWorld_IDW01M1_Fabio_Ricezione
Fork of HTTPClient by
Diff: HTTPClient.cpp
- Revision:
- 19:17578cfdb57a
- Parent:
- 18:277279a1891e
- Child:
- 20:bbbfaf4cc055
--- a/HTTPClient.cpp Wed May 07 16:48:10 2014 +0000 +++ b/HTTPClient.cpp Mon Nov 07 17:08:02 2016 +0000 @@ -40,16 +40,16 @@ #define MIN(x,y) (((x)<(y))?(x):(y)) #define MAX(x,y) (((x)>(y))?(x):(y)) -#define CHUNK_SIZE 256 + +#define MAX_KEY 64 +#define MAX_VALUE 64 #include <cstring> #include "HTTPClient.h" -HTTPClient::HTTPClient() : -m_sock(), m_basicAuthUser(NULL), m_basicAuthPassword(NULL), m_httpResponseCode(0) +HTTPClient::HTTPClient(HTTPWiFi & _m_sock) : m_sock(_m_sock) { - } HTTPClient::~HTTPClient() @@ -65,18 +65,18 @@ } #endif -HTTPResult HTTPClient::get(const char* url, IHTTPDataIn* pDataIn, int timeout /*= HTTP_CLIENT_DEFAULT_TIMEOUT*/) //Blocking +HTTPResult HTTPClient::get(const char* url, IHTTPDataIn* pDataIn, int timeout = HTTP_CLIENT_DEFAULT_TIMEOUT) //Blocking { return connect(url, HTTP_GET, NULL, pDataIn, timeout); } -HTTPResult HTTPClient::get(const char* url, char* result, size_t maxResultLen, int timeout /*= HTTP_CLIENT_DEFAULT_TIMEOUT*/) //Blocking +HTTPResult HTTPClient::get(const char* url, char* result, size_t maxResultLen, int timeout = HTTP_CLIENT_DEFAULT_TIMEOUT) //Blocking { HTTPText str(result, maxResultLen); return get(url, &str, timeout); } -HTTPResult HTTPClient::post(const char* url, const IHTTPDataOut& dataOut, IHTTPDataIn* pDataIn, int timeout /*= HTTP_CLIENT_DEFAULT_TIMEOUT*/) //Blocking +HTTPResult HTTPClient::post(const char* url, const IHTTPDataOut& dataOut, IHTTPDataIn* pDataIn, int timeout = HTTP_CLIENT_DEFAULT_TIMEOUT) //Blocking { return connect(url, HTTP_POST, (IHTTPDataOut*)&dataOut, pDataIn, timeout); } @@ -113,6 +113,7 @@ return HTTP_PRTCL; \ } while(0) + HTTPResult HTTPClient::connect(const char* url, HTTP_METH method, IHTTPDataOut* pDataOut, IHTTPDataIn* pDataIn, int timeout) //Execute request { m_httpResponseCode = 0; //Invalidate code @@ -145,6 +146,8 @@ DBG("Host: %s", host); DBG("Port: %d", port); DBG("Path: %s", path); +// Open + m_sock.open(&m_sock.getWiFi()); //Connect DBG("Connecting socket to server"); @@ -152,18 +155,19 @@ if (ret < 0) { m_sock.close(); - ERR("Could not connect"); + ERR("TCP Could not connect"); return HTTP_CONN; } - + DBG ("TCP connected\n\r"); //Send request DBG("Sending request"); - char buf[CHUNK_SIZE]; +// char buf[CHUNK_SIZE]; const char* meth = (method==HTTP_GET)?"GET":(method==HTTP_POST)?"POST":(method==HTTP_PUT)?"PUT":(method==HTTP_DELETE)?"DELETE":""; snprintf(buf, sizeof(buf), "%s %s HTTP/1.1\r\nHost: %s\r\n", meth, path, host); //Write request ret = send(buf); if(ret) { + //m_sock.close(); m_sock.close(); ERR("Could not write request"); return HTTP_CONN; @@ -298,7 +302,7 @@ } break; } - +printf (" ---->> buf: %s\n\r",buf); int crlfPos = crlfPtr - buf; buf[crlfPos] = '\0'; @@ -322,7 +326,7 @@ PRTCL_ERR(); } - DBG("Reading headers"); + DBG("=======>>>> Reading headers"); memmove(buf, &buf[crlfPos+2], trfLen - (crlfPos + 2) + 1); //Be sure to move NULL-terminating char as well trfLen -= (crlfPos + 2); @@ -364,14 +368,14 @@ buf[crlfPos] = '\0'; - char key[32]; - char value[32]; + char key[MAX_KEY]; + char value[MAX_VALUE]; //key[31] = '\0'; //value[31] = '\0'; - memset(key, 0, 32); - memset(value, 0, 32); + memset(key, 0, MAX_KEY); + memset(value, 0, MAX_VALUE); //int n = sscanf(buf, "%31[^:]: %31[^\r\n]", key, value); @@ -381,14 +385,14 @@ if(keyEnd != NULL) { *keyEnd = '\0'; - if(strlen(buf) < 32) + if(strlen(buf) < MAX_KEY) { strcpy(key, buf); n++; char* valueStart = keyEnd + 2; if( (valueStart - buf) < crlfPos ) { - if(strlen(valueStart) < 32) + if(strlen(valueStart) < MAX_VALUE) { strcpy(value, valueStart); n++; @@ -574,27 +578,40 @@ { DBG("Trying to read between %d and %d bytes", minLen, maxLen); size_t readLen = 0; - + +#ifdef LICIO + +#else if(!m_sock.is_connected()) { WARN("Connection was closed by server"); return HTTP_CLOSED; //Connection was closed by server } - +#endif int ret; while(readLen < maxLen) { if(readLen < minLen) { DBG("Trying to read at most %d bytes [Blocking]", minLen - readLen); +#ifdef LICIO + m_sock.set_blocking(false); + ret = m_sock.recv(buf + readLen, minLen - readLen); +#else m_sock.set_blocking(false, m_timeout); ret = m_sock.receive_all(buf + readLen, minLen - readLen); +#endif } else { DBG("Trying to read at most %d bytes [Not blocking]", maxLen - readLen); +#ifdef LICIO + m_sock.set_blocking(false); + ret = m_sock.recv(buf + readLen, maxLen - readLen); +#else m_sock.set_blocking(false, 0); ret = m_sock.receive(buf + readLen, maxLen - readLen); +#endif } if( ret > 0) @@ -607,6 +624,9 @@ } else { +#ifdef LICIO +// if (ret == NSAPI_ERROR_NO_CONNECTION) { *pReadLen = readLen; return HTTP_CONN; } +#else if(!m_sock.is_connected()) { ERR("Connection error (recv returned %d)", ret); @@ -617,12 +637,16 @@ { break; } +#endif } - +#ifdef LICIO +// if (ret == NSAPI_ERROR_NO_CONNECTION) { *pReadLen = readLen; return HTTP_CONN; } +#else if(!m_sock.is_connected()) { break; } +#endif } DBG("Read %d bytes", readLen); *pReadLen = readLen; @@ -637,15 +661,23 @@ } DBG("Trying to write %d bytes", len); size_t writtenLen = 0; - + +#ifdef LICIO +#else if(!m_sock.is_connected()) { WARN("Connection was closed by server"); return HTTP_CLOSED; //Connection was closed by server } - +#endif +#ifdef LICIO + m_sock.set_blocking(false); + int ret = m_sock.send(buf, len); + +#else m_sock.set_blocking(false, m_timeout); int ret = m_sock.send_all(buf, len); +#endif if(ret > 0) { writtenLen += ret; @@ -736,4 +768,4 @@ path[pathLen] = '\0'; return HTTP_OK; -} +} \ No newline at end of file