下面說說超時的發現,有可能出現超時的緣由,以及超時處理。瀏覽器
當你捕獲到一個採用JSOUP
去請求超時的連接,我是經過catch
去發現。測試
try{ doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0") .header("Connection", "close")//若是是這種方式,這裏務必帶上 .timeout(8000)//超時時間 .get(); } catch (Exception e) {//能夠精確處理timeoutException //超時處理 }
經過try···catch
去發現超時,而後結合本身的處理,這裏要說幾個問題。網站
Connection:close
,有同窗可能會問,這個不是相應頭裏的嗎?是的,有的時候你看到在請求頭裏,有的時候看到在相應頭裏,並且通常是 Connection:keep-alive
,你加上就能夠了。下面會講到。Kill
了。其實下一篇我也會單獨再說一下由於編碼問題影響亂碼的問題,可能有人會問了,編碼問題,怎麼還會影響超時?不是隻會影響亂碼嗎?這裏有一個細節,咱們超時實際上是分兩種,一個是請求超時,一個是讀取超時,而個人是讀取超時。編碼
這個答案我不能確定的告訴你,可是我測試發現是會影響超時。開始是這樣去請求,我還採用屢次,請求最頻繁超時的地方,我甚至失敗重複請求6次。並且每次超時時間設置都是8秒,timeout(8000)//超時時間
。url
try{ doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0") .header("Connection", "close")//若是是這種方式,這裏務必帶上 .timeout(8000)//超時時間 .get(); } catch (Exception e) {//能夠精確處理timeoutException try{ doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0") .header("Connection", "close") .timeout(8000) .get(); } catch (Exception e2) { //超時處理,超時2次 } }
也能夠用如下方式處理spa
doc = getDate(url);
public static Document getDate(String url) { Document doc = null; boolean flag = true; while (flag) { try { doc = Jsoup.connect(url).timeout(5000).userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.0)").get(); flag = false; } catch (IOException e) { // e.printStackTrace(); } } return doc; }