天天看點

Java處理HTTP請求逾時問題

分享知識 傳遞快樂

在發送POST或GET請求時,傳回逾時異常處理辦法:

捕獲 SocketTimeoutException | ConnectTimeoutException | ConnectionPoolTimeout 異常      

以上三種異常說明:

SocketTimeoutException:是Java包下抛出的異常,這定義了Socket讀資料的逾時時間,即從server擷取響應資料須要等待的時間;當讀取或者接收Socket逾時會抛出SocketTimeoutException。

ConnectTimeoutException:是Apache的HttpClient包抛出的逾時異常,定義了通過網絡與server建立連接配接的逾時時間,Httpclient包中通過一個異步線程去建立與server的socket連接配接,這就是該socket連接配接的逾時時;

當連接配接HTTPserver或者等待HttpConnectionManager管理的一個有效連接配接逾時出錯會抛出ConnectionTimeoutException。

ConnectionPoolTimeout:也是Apache的HttpClient包抛出的逾時異常,定義了從 ConnectionManager 管理的連接配接池中取出連接配接的逾時時間;出錯會抛出 ConnectionPoolTimeoutException。

總結:

SocketTimeoutException異常是一個通用的異常,無論是用原生的HTTP請求,還是用Apache下的HttpClient包,在抛出的異常中都需要捕獲 SocketTimeoutException 異常。

例:

public static String doGet(String url, Object params, String contentType) {
  try {
    return HttpUtils.doGetSend(url, params, contentType);
  } catch (SocketTimeoutException | ConnectTimeoutException e) {
    e.printStackTrace();
    System.out.println("請求連接配接逾時:" + e.getMessage());
  } catch (IOException e) {
    e.printStackTrace();
    System.out.println("請求異常,異常資訊:" + e.getMessage());
  } catch (Exception e) {
    e.printStackTrace();
  }
  return null;
}      

繼續閱讀