分享知識 傳遞快樂
在發送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;
}