2017-03-17 6 views
0

Ich habe einen Client, der eine Verbindung zu einem Server herstellt, um eine Antwort zu lesen. Der Server benötigt ca. 5 Minuten, um auf eine bestimmte Anfrage zu antworten, wenn ich Postman zum Ausführen der Anfrage verwende.Go HTTP Request Timeout

Ich schreibe diesen Client in der Sprache Go und führe den folgenden Code aus, um ein Timeout von 10 Minuten festzulegen.

_client := &http.Client{ 
     Timeout: 10 * time.Minute, 
} 

resp, err := _client.Post(c.Url, "application/json", r) 

Die Anfrage wird jedoch nach 2 Minuten mit einem Fehler beendet. Der Fehler sagt nur EOF.

Ich habe versucht, das Timeout auf 15 Sekunden einzustellen, um zu prüfen, ob die Konfiguration funktioniert und die Anfrage in 15 Sekunden wie erwartet beendet wird.

Wie kann ich sicherstellen, dass das Timeout 10 Minuten beträgt?

+1

Was genau ist der Fehler? – JimB

+0

Mögliche Duplikate: [Wie Zeitüberschreitung für http.Get() Anforderungen in Golang?] (Http://stackoverflow.com/questions/16895294/how-to-set-timeout-for-http-get-requests-in -golang); und [HTTP-Client, Leerlaufzeitlimit] (http://stackoverflow.com/questions/27784521/http-client-idle-timeout). Lösen sie dein Problem? – icza

+0

@KashifNazar: EOF bedeutet, dass der Server die Verbindung aus irgendeinem Grund geschlossen hat. Sind Sie sicher, dass Sie die vollständige Anfrage geschrieben haben? Ist 'r 'gültig oder blockiert es den Anfragetext? – JimB

Antwort

0

Ich hatte das gleiche Problem, aber dort mein Code lief in GAE, die die Anfrage nach 2 min ohne Operation abgebrochen. Also, wenn Sie insgesamt haben Kontrolle darüber, wo Ihr Code ausgeführt wird, sollten Sie die Timeout-Zeit in client.Timeout angeben können

See here

-1

Das eigentliche Problem hier ist, dass Sie HTTP in einer Art und Weise Implementierer möchten, mit dem nicht Du auch. Sie können mehr über Ihr Problem und die beste Praxis lesen, um es zu lösen here. Die kurze Antwort ist, dass Sie besser schnell auf den Client reagieren und sagen, dass der Job zusammen mit der URL ausgeführt wird, um das Ergebnis zu finden, wenn es fertig ist.