調用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 設定很短,會報等待響應逾時。