Java HttpURLConnection超時和IO異常處置。本站提示廣大學習愛好者:(Java HttpURLConnection超時和IO異常處置)文章只能為提供參考,不一定能成為您想要的結果。以下是Java HttpURLConnection超時和IO異常處置正文
比來同步數據的時刻發明了一個成績,我自己後台拔出數據後給其他部分後台做同步。說簡略一點其實就是挪用對方供給的接口,停止HTTP要求挪用。然後前面發明成績了。HTTP要求的話,有能夠要求超時,中止掉敗,IO異常其實都有能夠,假如是日常平凡翻開一個網頁還好,打不開的時刻,你會關失落,或許他頁面給你顯示信息。然則同步,弗成以如許做,一旦要求掉敗,必需讓數據准確的同步,明天才認識到這個成績的主要性。
String httpUrl = "https://www.百度.com/s?ie=UTF-8&tn=90594569_hao_pg&wd=1";
URL url = null;
HttpURLConnection httpConn = null;
String result = "";
try {
String address = httpUrl;
url = new URL(address);
httpConn = (HttpURLConnection) url.openConnection();
//A URL connection can be used for input and/or output. Set the
//DoInput flag to true if you intend to use the URL connection for input,
//false if not. The default is true.
//URL銜接可用於input或output。假如想用URL銜接輸出,設置DoInput標簽為true。
//輸出和輸入是針對盤算機的,假如以法式員的角度斟酌,常常弄混。
//input輸出,output輸入,那末不是從output裡read,input中write嗎,其實相反
//input輸出進盤算機,盤算機能力讀,所所以從input read,而output是盤算機輸入,經由過程output write。
httpConn.setDoOutput(false);
//所以假如setDoInput(false),想從URLConnection讀取時不克不及讀取
//Cannot read from URLConnection if doInput=false (call setDoInput(true))
httpConn.setDoInput(true);
//銜接樹立超不時間還有讀取數據超不時間,
httpConn.setConnectTimeout(600000);
httpConn.setReadTimeout(600000);
httpConn.setRequestMethod("GET");
httpConn.connect();
//獲得狀況碼
int code = httpConn.getResponseCode();
System.out.println(code);
//讀http要求呼應
BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String line;
while ((line = reader.readLine()) != null)
{
result = result + line+"\n";
}
System.out.println(result);
//封閉IO和銜接
reader.close();
httpConn.disconnect();
}
catch(Exception e){
log.error(e);
}
finally{
if(httpConn!=null)
httpConn.disconnect();
}
代碼看上去寫的沒甚麼,該釋放資本的處所也釋放了。該打日記輸入的也打了。其實成績就是異常的處置。之前認為一些器械沒有同步曩昔是由於銜接超時的成績。所以專程捕捉SocketTimeoutException異常,前面看了日記以後,發明是同步接口那裡辦事器的成績,報了502毛病。其實異常是IO異常。
不管是那種情形,我們都要在湧現這類成績以後,再次地把要求發送曩昔,依據接口前往的成果,確認對方曾經同步到。假如辦事器臨時性的出了成績,我們可以暫停一小段時光後,然後再次要求。
所以臨時想到的辦法是,因為同步的及時性請求不高,那末可以距離的時光可以長一點。然後輪回,另起線程,每次距離5分鐘,直至成果正常。
catch(Exception e){
for (int i = 0; i < 6; i++) {
Thread t = new Thread(){public void run(){get();}};
t.start();
if(result.equals("ok")){
break;
}
try {
Thread.sleep(300000);
} catch (InterruptedException e2) {
log.error(e2);
}
}
log.error(e);
}
以上就是對Java HttpURLConnection超時和IO異常處置的材料整頓,後續持續彌補相干材料,感謝年夜家對本站的支撐!