7

Ich benutze Apache http Client v4.5 und benutze es als REST-Client. In einigen Fällen erkenne ich einen Fehler" [lesen] I/O Fehler: Gelesen Zeitüberschreitung ", die aus dem httpclient-Framework kommt, wenn es den empfangenen Inhalt liest und zeigt es als letzte Nachricht.Apache Http Client druckt "[lesen] I/O-Fehler: Zeitüberschreitung gelesen" "

Es scheint keinen Einfluss zu haben, aber ich frage mich, ob jemand eine Idee hat, wo es ist kommt aus und wie es gelöst werden kann .. Laut dem folgenden Thread (link) scheint es ein Problem mit der "mutlithreaded" Konfiguration zu sein.

Allerdings verwende ich nur die Standardkonfiguration von http Client und während ich die verwende Version v4 Ich habe keine Ahnung h Ich kann "Multithread" auf "False" setzen, um zu sehen, ob es einen Unterschied macht.

Ich habe auch versucht, die Timeouts einzustellen, aber es hat nicht geholfen.

Irgendwelche Hinweise?

Log:

15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "HTTP/1.1 200 OK[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Date: Tue, 29 Dec 2015 14:48:03 GMT[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8[\r][\n]" 
15:48:05.984 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "X-Powered-By: PHP/5.6.8[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Cache-Control: nocache, private[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Length: 99[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Keep-Alive: timeout=5, max=99[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Connection: Keep-Alive[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "Content-Type: application/json[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[\r][\n]" 
15:48:05.985 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "{"success":true,"data":{"id":1946,"location":"http:\/\/localhost:9001\/shop\/api\/articles\/1946"}}" 
15:48:06.016 [main] DEBUG org.apache.http.wire - http-outgoing-8 << "[read] I/O error: Read timed out" 

mein Http Client initiert

HttpClientBuilder httpBuilder = HttpClientBuilder.create(); 

//  set timeout did not helped 
//  RequestConfig.Builder requestBuilder = RequestConfig.custom(); 
//  requestBuilder = requestBuilder.setConnectTimeout(timeout); 
//  requestBuilder = requestBuilder.setConnectionRequestTimeout(timeout); 
//  requestBuilder = requestBuilder.setSocketTimeout(timeout); 
//  httpBuilder.setDefaultRequestConfig(requestBuilder.build()); 

HttpClient httpClient = httpBuilder.build(); 
+0

Es hat nichts drucken . * Ihr Code * druckt es aus. Unklar, was Sie fragen, – EJP

+0

Welche Version von Apache HTTP-Client verwenden Sie? Nun, ich frage, ob jemand weiß, warum die Fehlermeldung "[lesen] I/O Fehler: Zeitüberschreitung gelesen" erscheint. – megloff

+0

Ich sehe das auch. Es ist auch erwähnenswert, dass keine Ausnahme geworfen wird und es nicht als Fehler protokolliert wird, genauso wie DEBUG. – BrianC

Antwort

2

Ich bin mit Httpclient 4.5.2 und in meinem Fall die Timeouts auf Anfrage Einstellung half:

HttpPost postRequest = new HttpPost("https://..."); 
postRequest.setHeader(..., ...); 

RequestConfig requestConfig = RequestConfig.custom() 
         .setSocketTimeout(1000) 
         .setConnectTimeout(1000) 
         .build(); 

postRequest.setConfig(requestConfig); 
0

Einer der Gründe für einen solchen Fehler könnte sein, dass der Server die Richtlinie zum Schließen von HTTP-Verbindungen u pon hat geantwortet. Wenn das der Fall ist, dann kann dieser Fehler durch die Deaktivierung Verbindung Wiederverwendung durch die Kunden vermieden werden, so gäbe es keine Notwendigkeit für die Kunden zu überprüfen, dass die Verbindung noch am Leben ist:

httpBuilder.setConnectionReuseStrategy((response, context) -> false); 
Verwandte Themen