1. 程式人生 > >httpclient 超時時間 等待時間 響應時間

httpclient 超時時間 等待時間 響應時間

HttpClient在使用中有兩個超時時間。

一、連線超時:connectionTimeout
   1.指的是連線一個url的連線等待時間。
   2.設定方法為:
Java程式碼
  1. HttpClient client = new HttpClient();   
  2. HttpMethod method = new GetMethod("http://test.com");      
  3. client.getHttpConnectionManager().getParams().setConnectionTimeout(3000);    
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("http://test.com");   
client.getHttpConnectionManager().getParams().setConnectionTimeout(3000);  

   3.測試的時候,將url改為一個不存在的url:“http://test.com”
   4:超時時間3000ms過後,系統報出異常。
     org.apache.commons.httpclient.ConnectTimeoutException: The host did not accept the connection within timeout of 3000 ms

二、讀取資料超時:soTimeout
   1.指的是連線上一個url,獲取response的返回等待時間
   2.設定方法偉:
Java程式碼
  1. HttpClient client = new HttpClient();   
  2. HttpMethod method = new GetMethod("http://localhost:8080/firstTest.htm?method=test");   
  3. client.getHttpConnectionManager().getParams().setSoTimeout(2000);  
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("http://localhost:8080/firstTest.htm?method=test");
client.getHttpConnectionManager().getParams().setSoTimeout(2000);

   3.測試的時候的連線url為我本地開啟的一個url,http://localhost:8080/firstTest.htm?method=test,在我這個測試url裡,當訪問到這個連結時,執行緒sleep一段時間,來模擬返回response超時。
Java程式碼
  1. @RequestMapping(params = "method=test")   
  2. public String testMethod(ModelMap model) {       
  3. try {       
  4.     Thread.sleep(3000);       
  5. catch (InterruptedException e) {       
  6. // TODO Auto-generated catch block    
  7.     e.printStackTrace();       
  8. }       
  9.       System.out.println("call testMethod method.");       
  10.       model.addAttribute("name""test method");       
  11. return"test";       
  12.   }  
@RequestMapping(params = "method=test")
public String testMethod(ModelMap model) {    
try {    
    Thread.sleep(3000);    
} catch (InterruptedException e) {    
    // TODO Auto-generated catch block    
    e.printStackTrace();    
}    
      System.out.println("call testMethod method.");    
      model.addAttribute("name", "test method");    
return "test";    
  }


   4:將讀取response返回超時時間設的時間比那個sleep時間短之後,執行程式給出異常:java.net.SocketTimeoutException: Read timed out

4.3版本不設定超時的話,一旦伺服器沒有響應,等待時間N久(>24小時)。  以上版本對4.3已經過時

4.3版本超時設定

1 2 3 4 5 CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet=new HttpGet("http://www.baidu.com");//HTTP Get請求(POST雷同) RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();//設定請求和傳輸超時時間 httpGet.setConfig(requestConfig); httpClient.execute(httpGet);//執行請求