ArduinoHttpClient icon indicating copy to clipboard operation
ArduinoHttpClient copied to clipboard

Very slow evaluation of the status code

Open ghost opened this issue 7 years ago • 4 comments

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?

ghost avatar Feb 17 '18 07:02 ghost

@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.

sandeepmistry avatar Mar 20 '18 14:03 sandeepmistry

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

georgeveys avatar Jan 05 '21 12:01 georgeveys

@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.

mmaxbar avatar Apr 13 '21 21:04 mmaxbar

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.

andersruneson avatar Apr 27 '23 14:04 andersruneson