我在JSOUP中获得了一个SocketTimeoutException:Readytimeout

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (175)

当我试图使用JSOUP解析大量HTML文档时,我会得到一个SocketTimeoutException。

例如,我有一个链接列表:

<a href="www.domain.com/url1.html">link1</a>
<a href="www.domain.com/url2.html">link2</a>
<a href="www.domain.com/url3.html">link3</a>
<a href="www.domain.com/url4.html">link4</a>

对于每个链接,我解析链接到URL的文档(来自href属性),以获取这些页面中的其他信息。

所以我可以想象这需要很长时间,但是如何关闭这个异常呢?

下面是整个堆栈跟踪:

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)

谢谢各位朋友!

编辑:抱歉,刚找到解决办法:

Jsoup.connect(url).timeout(0).get();

希望这对其他人有用...)

提问于
用户回答回答于

根据javadocsorg.jsoup.Connection的缺省超时时间为30秒。

如前所述,这可以使用设置 timeout(int millis)

另外,随着OP在编辑中的注释,这也可以使用设置timeout(0)。但是,正如javadocs所述:

超时为零被视为无限超时。

用户回答回答于

我觉得你能

Jsoup.connect("...").timeout(10*1000).get(); 

它将超时设置为10s。

扫码关注云+社区