Java中httpClient中的三種超時設定小結(轉)
阿新 • • 發佈:2019-01-07
在Apache的HttpClient包中,有三個設定超時的地方:
/* 從連線池中取連線的超時時間*/
ConnManagerParams.setTimeout(params, 1000);
/*連線超時*/
HttpConnectionParams.setConnectionTimeout(params, 2000);
/*請求超時*/
HttpConnectionParams.setSoTimeout(params, 4000);
第一行設定ConnectionPoolTimeout:
這定義了從ConnectionManager管理的連線池中取出連線的超時時間,此處設定為1秒。
第二行設定ConnectionTimeout:
這定義了通過網路與伺服器建立連線的超時時間。Httpclient包中通過一個非同步執行緒去建立與伺服器的socket連線,這就是該socket連線的超時時間,此處設定為2秒。
第三行設定SocketTimeout:
這定義了Socket讀資料的超時時間,即從伺服器獲取響應資料需要等待的時間,此處設定為4秒。
以上3種超時分別會丟擲ConnectionPoolTimeoutException,ConnectionTimeoutException與SocketTimeoutException。
ConnectTimeoutException:
當連線HTTP伺服器或者等待HttpConnectionManager管理的一個有效連線超時引發該異常。
SocketTimeoutException:
當讀取或者接收Socket超時引起該異常。
例
測試版本為HttpClient——3.1
public class TestHttpClientMain {
public static void main(String[] args) {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(
"http://test.com");
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(3000 );
client.getHttpConnectionManager().getParams()
.setSoTimeout(3000);
try {
int statusCode = client.executeMethod(method);
System.out.println(statusCode);
byte[] responseBody = null;
responseBody = method.getResponseBody();
String result = new String(responseBody);
System.out.println(result);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}