1. 程式人生 > >Java中httpClient中的三種超時設定小結(轉)

Java中httpClient中的三種超時設定小結(轉)

在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(); } } }