星期四, 2月 09, 2012

[Java] Httpurlconnection timeout issue

如何使用HttpUrlConnection的Request TIMEOUT例外處理?

故事是剛剛同事打電話來說,目前實作的REST CLIENT對於TIMEOUT的
Request無法有效擷取到例外事件處理!!
找到以下這篇討論也是解法:Java URLConnection Timeout


try{
URL url = new URL("http://www.myurl.com/sample.xml");
          URLConnection urlConn = url.openConnection();
          urlConn.setConnectTimeout(15000);
          urlConn.setReadTimeout(15000);
          urlConn.setAllowUserInteraction(false);         
          urlConn.setDoOutput(true);

          InputStream inStream = urlConn.getInputStream();
          InputSource input = new InputSource(inStream);
}catch(SocketTimeoutException e){

}catch(IOException e){
}


要自已設這二個參數然後在擷SocketTimeoutException
urlConn.setConnectTimeout(connectTimeout);
urlConn.setReadTimeout(socketTimeout);

另外一個方法擷至此文(JDK中的URLConnection參數詳解):
HttpURLConnection是基于HTTP協議的,其底層通過socket通信實現。如果不設置超時(timeout),在網絡異常的情況下,可能會導致程序僵死而不繼續往下執行。可以通過以下兩個語句來設置相應的超時 System.setProperty("sun.net.client.defaultConnectTimeout", 超時毫秒數字符串); System.setProperty("sun.net.client.defaultReadTimeout", 超時毫秒數字符串);
其中: sun.net.client.defaultConnectTimeout:連接主機的超時時間(單位:毫秒) sun.net.client.defaultReadTimeout:從主機讀取數據的超時時間(單位:毫秒)
例如: System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); System.setProperty("sun.net.client.defaultReadTime
Java中可以使用HttpURLConnection來請求WEB資源。 HttpURLConnection對象不能直接構造,需要通過URL.openConnection()來獲得HttpURLConnection

明天再來修正一下寫的CODE~

沒有留言:

張貼留言

留個話吧:)

其他你感興趣的文章

Related Posts with Thumbnails