調用HTTP接口時,設置請求超時時間,通過RequestConfig設置。
查看源碼,
// -1:永不超時 private int connectionRequestTimeout = -1; private int connectTimeout = -1; private int socketTimeout = -1;
Builder(org.apache.http.client.config.RequestConfig.Builder)
是RequestConfig(org.apache.http.client.config.RequestConfig)
的內部類,專門用於創建RequestConfig
HttpPost httpPost = new HttpPost(reqURL) Builder customReqConf = RequestConfig.custom(); customReqConf.setConnectTimeout(2000); customReqConf.setSocketTimeout(2000); customReqConf.setConnectionRequestTimeout(3000); httpPost.setConfig(customReqConf.build());
HttpClient內部有三個超時時間設置:連接池獲取可用連接超時,連接超時,讀取數據超時
1.從連接池中獲取可用連接超時
HttpClient中的要用連接時嘗試從連接池中獲取,若是在等待了一定的時間后還沒有獲取到可用連接(比如連接池中沒有空閑連接了)則會拋出獲取連接超時異常。
2.連接目標超時connectionTimeout
指的是連接目標url的連接超時時間,即客服端發送請求到與目標url建立起連接的最大時間。如果在該時間范圍內還沒有建立起連接,則就拋出connectionTimeOut異常。
如測試的時候,將url改為一個不存在的url:“http://test.com” ,超時時間3000ms過后,系統報出異常: org.apache.commons.httpclient.ConnectTimeoutException:The host did not accept the connection within timeout of 3000 ms
3.等待響應超時(讀取數據超時)socketTimeout
連接上一個url后,獲取response的返回等待時間 ,即在與目標url建立連接后,等待放回response的最大時間,在規定時間內沒有返回響應的話就拋出SocketTimeout。
測試時,將socketTimeout 設置很短,會報等待響應超時。
參考博客:https://blog.csdn.net/a1165117473/article/details/84105301