7

を出力しています。/Oエラー:受信したコンテンツを読み込んで最後のメッセージとして表示すると、httpclientフレームワークからの読み込みがタイムアウトします。Apache Httpクライアントは、 "[読み取り] I/Oエラー:読み取りタイムアウト" "

それは影響がないようですが、次のスレッド(link)によると、 "mutlithreaded"設定の問題であるようです。

しかし、私はhttpクライアントのデフォルト設定のみを使用していますが、バージョンv4私はヒントを持っていない私が "マルチスレッド"を偽に設定して、それが何か変わるかどうかを確認することができます。

私もタイムアウトを設定しようとしましたが、それは役に立たなかった。

ヒント

ログイン:

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" 

私のHTTPクライアントの初期化私はリクエストに応じてタイムアウトを設定し、私の場合にHTTPClient 4.5.2を使用してい

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

。 *あなたのコードはそれを印刷します。あなたが何を求めているのかわかりません。 – EJP

+0

どのバージョンのApache HTTPクライアントを使用していますか?まあ、誰かが "[読み取り] I/Oエラー:読み取りタイムアウト"というエラーメッセージが表示される理由を知っているかどうかを尋ねています。 – megloff

+0

私もこれを見ています。例外もスローされておらず、DEBUGと同じようにERRORとして記録されていないことにも注意してください。 – BrianC

答えて

2

を助けた:

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

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

postRequest.setConfig(requestConfig); 
0

このようなエラーが発生する理由の1つは、サーバーがHTTP接続を閉じるポリシーポンは答えました。その場合は、このエラーは、クライアントからの接続の再利用を無効にすることで回避することができるので、クライアントは接続がまだ生きていることを確認するためには必要なかったでしょう:それは何も印刷されません

httpBuilder.setConnectionReuseStrategy((response, context) -> false); 
関連する問題