1
0
mirror of https://github.com/arduino-libraries/ArduinoHttpClient.git synced 2025-04-19 21:22:15 +03:00

Make skipResponseHeaders() optional, if contentLength() is called first

This commit is contained in:
Sandeep Mistry 2016-06-17 14:55:03 -04:00
parent 4b6f4dfa29
commit 255118660b
3 changed files with 54 additions and 39 deletions

View File

@ -384,6 +384,17 @@ int HttpClient::skipResponseHeaders()
} }
} }
int HttpClient::contentLength()
{
// skip the response headers, if they haven't been read already
if (!endOfHeadersReached())
{
skipResponseHeaders();
}
return iContentLength;
}
bool HttpClient::endOfBodyReached() bool HttpClient::endOfBodyReached()
{ {
if (endOfHeadersReached() && (contentLength() != kNoContentLengthHeader)) if (endOfHeadersReached() && (contentLength() != kNoContentLengthHeader))

View File

@ -159,6 +159,7 @@ public:
/** Check if a header is available to be read. /** Check if a header is available to be read.
Use readHeaderName() to read header name, and readHeaderValue() to Use readHeaderName() to read header name, and readHeaderValue() to
read the header value read the header value
MUST be called after responseStatusCode() and before contentLength()
*/ */
bool headerAvailable(); bool headerAvailable();
@ -177,6 +178,7 @@ public:
through the headers. Check whether or not the end of the headers has through the headers. Check whether or not the end of the headers has
been reached by calling endOfHeadersReached(), although after that point been reached by calling endOfHeadersReached(), although after that point
this will still return data as read() would, but slightly less efficiently this will still return data as read() would, but slightly less efficiently
MUST be called after responseStatusCode() and before contentLength()
@return The next character of the response headers @return The next character of the response headers
*/ */
int readHeader(); int readHeader();
@ -186,6 +188,7 @@ public:
returned in the response. You can also use it after you've found all of returned in the response. You can also use it after you've found all of
the headers you're interested in, and just want to get on with processing the headers you're interested in, and just want to get on with processing
the body. the body.
MUST be called after responseStatusCode()
@return HTTP_SUCCESS if successful, else an error code @return HTTP_SUCCESS if successful, else an error code
*/ */
int skipResponseHeaders(); int skipResponseHeaders();
@ -204,10 +207,12 @@ public:
virtual bool completed() { return endOfBodyReached(); }; virtual bool completed() { return endOfBodyReached(); };
/** Return the length of the body. /** Return the length of the body.
Also skips response headers if they have not been read already
MUST be called after responseStatusCode()
@return Length of the body, in bytes, or kNoContentLengthHeader if no @return Length of the body, in bytes, or kNoContentLengthHeader if no
Content-Length header was returned by the server Content-Length header was returned by the server
*/ */
int contentLength() { return iContentLength; }; int contentLength();
// Inherited from Print // Inherited from Print
// Note: 1st call to these indicates the user is sending the body, so if need // Note: 1st call to these indicates the user is sending the body, so if need

View File

@ -68,9 +68,14 @@ void loop()
// similar "success" code (200-299) before carrying on, // similar "success" code (200-299) before carrying on,
// but we'll print out whatever response we get // but we'll print out whatever response we get
err = http.skipResponseHeaders(); // If you are interesting in the response headers, you
if (err >= 0) // can read them here:
{ //while(http.headerAvailable())
//{
// String headerName = http.readHeaderName();
// String headerValue = http.readHeaderValue();
//}
int bodyLen = http.contentLength(); int bodyLen = http.contentLength();
Serial.print("Content length is: "); Serial.print("Content length is: ");
Serial.println(bodyLen); Serial.println(bodyLen);
@ -104,12 +109,6 @@ void loop()
} }
} }
else else
{
Serial.print("Failed to skip response headers: ");
Serial.println(err);
}
}
else
{ {
Serial.print("Getting response failed: "); Serial.print("Getting response failed: ");
Serial.println(err); Serial.println(err);