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

Add new responseBody API to simplify reading response body as a String

This commit is contained in:
Sandeep Mistry 2016-06-22 12:47:56 -04:00
parent bdc5281733
commit f56eecbc6f
10 changed files with 43 additions and 80 deletions

View File

@ -509,6 +509,24 @@ int HttpClient::contentLength()
return iContentLength; return iContentLength;
} }
String HttpClient::responseBody()
{
int bodyLength = contentLength();
String response;
if (bodyLength > 0)
{
response.reserve(bodyLength);
}
while (available())
{
response += (char)read();
}
return response;
}
bool HttpClient::endOfBodyReached() bool HttpClient::endOfBodyReached()
{ {
if (endOfHeadersReached() && (contentLength() != kNoContentLengthHeader)) if (endOfHeadersReached() && (contentLength() != kNoContentLengthHeader))

View File

@ -245,6 +245,13 @@ public:
*/ */
int contentLength(); int contentLength();
/** Return the response body as a String
Also skips response headers if they have not been read already
MUST be called after responseStatusCode()
@return response body of request as a String
*/
String responseBody();
/** Enables connection keep-alive mode /** Enables connection keep-alive mode
*/ */
void connectionKeepAlive(); void connectionKeepAlive();

View File

@ -33,7 +33,6 @@ WiFiClient wifi;
HttpClient client = HttpClient(wifi, serverAddress, port); HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS; int status = WL_IDLE_STATUS;
int statusCode = 0; int statusCode = 0;
int contentLength = 0;
String response; String response;
void setup() { void setup() {
@ -65,23 +64,11 @@ void loop() {
Serial.println("making GET request"); Serial.println("making GET request");
client.get(path); client.get(path);
// read the status code of the response // read the status code and body of the response
statusCode = client.responseStatusCode(); statusCode = client.responseStatusCode();
response = client.responseBody();
Serial.print("Status code: "); Serial.print("Status code: ");
Serial.println(statusCode); Serial.println(statusCode);
// read the content length of the response
contentLength = client.contentLength();
Serial.print("Content Length: ");
Serial.println(contentLength);
// read the response body
response = "";
response.reserve(contentLength);
while (client.available()) {
response += (char)client.read();
}
Serial.print("Response: "); Serial.print("Response: ");
Serial.println(response); Serial.println(response);

View File

@ -27,7 +27,6 @@ WiFiClient wifi;
HttpClient client = HttpClient(wifi, serverAddress, port); HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS; int status = WL_IDLE_STATUS;
int statusCode = 0; int statusCode = 0;
int contentLength = 0;
String response; String response;
void setup() { void setup() {
@ -69,16 +68,9 @@ void loop() {
// send the POST request // send the POST request
client.post(path, contentType, postData); client.post(path, contentType, postData);
// read the status code and content length of the response // read the status code and body of the response
statusCode = client.responseStatusCode(); statusCode = client.responseStatusCode();
contentLength = client.contentLength(); response = client.responseBody();
// read the response body
response = "";
response.reserve(contentLength);
while (client.available()) {
response += (char)client.read();
}
Serial.print("Status code: "); Serial.print("Status code: ");
Serial.println(statusCode); Serial.println(statusCode);

View File

@ -70,6 +70,8 @@ void sendRequest(int light, String cmd, String value) {
request += light; request += light;
request += "/state/"; request += "/state/";
String contentType = "application/json";
// make a string for the JSON command: // make a string for the JSON command:
String hueCmd = "{\"" + cmd; String hueCmd = "{\"" + cmd;
hueCmd += "\":"; hueCmd += "\":";
@ -81,23 +83,11 @@ void sendRequest(int light, String cmd, String value) {
Serial.print("JSON command to server: "); Serial.print("JSON command to server: ");
// make the PUT request to the hub: // make the PUT request to the hub:
httpClient.beginRequest(); httpClient.put(request, contentType, hueCmd);
httpClient.put(request);
httpClient.sendHeader("Content-Type", "application/json");
httpClient.sendHeader("Content-Length", hueCmd.length());
httpClient.endRequest();
httpClient.write((const byte*)hueCmd.c_str(), hueCmd.length());
// read the status code and content length of the response // read the status code and body of the response
int statusCode = httpClient.responseStatusCode(); int statusCode = httpClient.responseStatusCode();
int contentLength = httpClient.contentLength(); String response = httpClient.responseBody();
// read the response body
String response = "";
response.reserve(contentLength);
while (httpClient.available()) {
response += (char)httpClient.read();
}
Serial.println(hueCmd); Serial.println(hueCmd);
Serial.print("Status code from server: "); Serial.print("Status code from server: ");

View File

@ -26,7 +26,6 @@ HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS; int status = WL_IDLE_STATUS;
String response; String response;
int statusCode = 0; int statusCode = 0;
int contentLength = 0;
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
@ -55,16 +54,9 @@ void loop() {
client.del("/", contentType, delData); client.del("/", contentType, delData);
// read the status code and content length of the response // read the status code and body of the response
statusCode = client.responseStatusCode(); statusCode = client.responseStatusCode();
contentLength = client.contentLength(); response = client.responseBody();
// read the response body
response = "";
response.reserve(contentLength);
while (client.available()) {
response += (char)client.read();
}
Serial.print("Status code: "); Serial.print("Status code: ");
Serial.println(statusCode); Serial.println(statusCode);

View File

@ -25,7 +25,6 @@ HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS; int status = WL_IDLE_STATUS;
String response; String response;
int statusCode = 0; int statusCode = 0;
int contentLength = 0;
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
@ -51,16 +50,9 @@ void loop() {
Serial.println("making GET request"); Serial.println("making GET request");
client.get("/"); client.get("/");
// read the status code and content length of the response // read the status code and body of the response
statusCode = client.responseStatusCode(); statusCode = client.responseStatusCode();
contentLength = client.contentLength(); response = client.responseBody();
// read the response body
response = "";
response.reserve(contentLength);
while (client.available()) {
response += (char)client.read();
}
Serial.print("Status code: "); Serial.print("Status code: ");
Serial.println(statusCode); Serial.println(statusCode);

View File

@ -26,7 +26,6 @@ HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS; int status = WL_IDLE_STATUS;
String response; String response;
int statusCode = 0; int statusCode = 0;
int contentLength = 0;
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
@ -55,16 +54,9 @@ void loop() {
client.post("/", contentType, postData); client.post("/", contentType, postData);
// read the status code and content length of the response // read the status code and body of the response
statusCode = client.responseStatusCode(); statusCode = client.responseStatusCode();
contentLength = client.contentLength(); response = client.responseBody();
// read the response body
response = "";
response.reserve(contentLength);
while (client.available()) {
response += (char)client.read();
}
Serial.print("Status code: "); Serial.print("Status code: ");
Serial.println(statusCode); Serial.println(statusCode);

View File

@ -26,7 +26,6 @@ HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS; int status = WL_IDLE_STATUS;
String response; String response;
int statusCode = 0; int statusCode = 0;
int contentLength = 0;
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
@ -55,16 +54,9 @@ void loop() {
client.put("/", contentType, putData); client.put("/", contentType, putData);
// read the status code and content length of the response // read the status code and body of the response
statusCode = client.responseStatusCode(); statusCode = client.responseStatusCode();
contentLength = client.contentLength(); response = client.responseBody();
// read the response body
response = "";
response.reserve(contentLength);
while (client.available()) {
response += (char)client.read();
}
Serial.print("Status code: "); Serial.print("Status code: ");
Serial.println(statusCode); Serial.println(statusCode);

View File

@ -33,6 +33,7 @@ noDefaultRequestHeaders KEYWORD2
headerAvailable KEYWORD2 headerAvailable KEYWORD2
readHeaderName KEYWORD2 readHeaderName KEYWORD2
readHeaderValue KEYWORD2 readHeaderValue KEYWORD2
responseBody KEYWORD2
####################################### #######################################
# Constants (LITERAL1) # Constants (LITERAL1)