簡體   English   中英

在Jsoup中使用execute()時發生SocketTimeoutException

[英]SocketTimeoutException on using execute() in Jsoup

當我嘗試使用Jsoup解析HTML頁面時,出現SocketTimeoutException

java.net.SocketTimeoutException: Read timed out
  at java.net.SocketInputStream.socketRead0(Native Method)
  at java.net.SocketInputStream.read(Unknown Source)
  at java.io.BufferedInputStream.fill(Unknown Source)
  at java.io.BufferedInputStream.read1(Unknown Source)
  at java.io.BufferedInputStream.read(Unknown Source)
  at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
  at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
  at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
  at java.net.HttpURLConnection.getResponseCode(Unknown Source)
  at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:381)
  at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
  at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
  at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)
  at app.ForumCrawler.crawl(ForumCrawler.java:50)
  at Main.main(Main.java:15)

我使用了這部分代碼來解析頁面,因為我正在尋找響應,例如200,404等。

String userAgent = "Mozilla/5.0 (jsoup)";
int timeout = 5 * 1000;
Document localDoc = null;
String url = "<url>";
Connection.Response response = Jsoup.connect(url).userAgent(userAgent).timeout(timeout).execute();
if(response.statusCode() == 200) {
    localDoc = Jsoup.parse(response.body());
    //do the stuff..
}

我碰到過,如果我們使用.get()而不是.execute()我們可以擺脫SocketTimeoutException問題,但是如果我使用.get()那么我將無法獲得響應。

請建議我使用哪一個來擺脫SocketTimeoutException並在嘗試解析頁面時獲得response

提前致謝。

我碰到過,如果我們使用.get()而不是.execute(),我們可以擺脫SocketTimeoutException問題

如您在帖子中的調用堆棧中所見, get()方法在內部調用execute()方法:

at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:381)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)<-- execute() called
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)<-- ...from get().
at app.ForumCrawler.crawl(ForumCrawler.java:50)

因此,您不能擺脫SocketTimeoutException 但是,您可以通過處理此異常來增強代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM