7

我使用的Apache HTTP客戶端V4.5,並使用它作爲一個REST客戶端在某些情況下,我承認一個錯誤」 [閱讀]我/ O錯誤:讀超時」這是從HttpClient的框架時,它讀取接收到的內容,並顯示它作爲最後的消息Apache的HTTP客戶端打印「[閱讀] I/O錯誤:讀取超時」。「

這似乎沒有影響,但是我不知道是否有人有想法的地方根據以下線程(link),它似乎是一個與「mutlithreaded」配置有關的問題

但是,我只使用http客戶端的默認配置,而當我使用V4版本我不知道^ h嗷嗷我可以設置「多線程」爲假,看它是否有什麼差別。

我也試着設置超時,但它並沒有幫助。

任何提示?

登錄:

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客戶端初始化

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。 – BrianC

回答

2

我用我的情況HttpClient的4.5.2,並在請求設置超時幫助:

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

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

postRequest.setConfig(requestConfig); 
0

的原因之一爲具有這樣的錯誤可以是服務器遵循閉合HTTP連接u的政策龐有迴應。如果是這樣的話,則可以由客戶端禁用連接復來避免這個錯誤,所以就不需要在客戶端驗證連接還活着:

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