程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java HttpURLConnection超時和IO異常處置

Java HttpURLConnection超時和IO異常處置

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved