arduino-libraries / ArduinoHttpClient

Arduino HTTP Client library
288 stars 172 forks source link

Very slow evaluation of the status code #38

Open koulombus opened 6 years ago

koulombus commented 6 years ago

Hi,

I use the sample "SimpleGet" to get a UUID from a server.

The output show me a very long time on getting the status code.

making GET request

Time after get Request: 524ms
Time after get Status code: 9538ms
Time after get response body: 9566ms

Status code: 200
Response: 
{
  "uuid" : "b44c5405-7c56-4879-b4e8-ef28fc06d4a7"
}
Wait five seconds

Here the code...

void loop() {
  Serial.println("making GET request");
  long startTime = millis();
  client.get("/api/v1/uuid");

  Serial.println();
  Serial.print("Time after get Request: ");
  Serial.print(millis() - startTime);
  Serial.println("ms");

  // read the status code and body of the response
  statusCode = client.responseStatusCode();

  Serial.print("Time after get Status code: ");
  Serial.print(millis() - startTime);
  Serial.println("ms");

  response = client.responseBody();

  Serial.print("Time after get response body: ");
  Serial.print(millis() - startTime);
  Serial.println("ms");

  Serial.println();
  Serial.print("Status code: ");
  Serial.println(statusCode);
  Serial.println("Response: ");
  Serial.println(response);

  Serial.println("Wait five seconds");
  delay(5000);
}

is there something wrong with this simple code?

sandeepmistry commented 6 years ago

@cawena what if you add a client.stop() before the wait?

In the future if would be valuable to get the entire sketch you are using, as well as the hardware you are using.

georgeveys commented 3 years ago

Can anyone shed any light on this? I'm also experiencing almost a second of latency on decoding the response and status code

mmaxbar commented 3 years ago

@georgeveysSFL try this: in "HttpClient.h" go to this entry, change the kHttpWaitForDataDelay from 1000 to 100:

// Number of milliseconds that we wait each time there isn't any data
// available to be read (during status code and header processing)
static const int kHttpWaitForDataDelay = 100; 

The one second latency comes from the code running through too quickly, so there is no response to be collected yet. This triggers a 1000ms Delay. If you don't want to mess with the library, you could also add a sufficient wait before trying to access the response in your code.

andersruneson commented 1 year ago

This is fixed in below PR https://github.com/arduino-libraries/ArduinoHttpClient/pull/125 However, the time could be reduced even more, the client tries several times until data is returned.