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異常處置的材料整頓,後續持續彌補相干材料,感謝年夜家對本站的支撐!