Jsoup SocketTimeoutException:读取超时

2022-08-31 10:11:40

当我尝试使用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)

答案 1

我认为你可以做到

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

这会将超时设置为 10 秒。


答案 2

好吧 - 所以,我试图提供这个作为Marcos答案的编辑,但编辑被拒绝了。尽管如此,以下信息可能对未来的访问者有用:

根据 javadocs 的说法,a 的默认超时为 30 秒。org.jsoup.Connection

如前所述,可以使用以下命令进行设置timeout(int millis)

此外,正如OP在编辑中指出的那样,也可以使用.但是,正如javadocs所说:timeout(0)

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


推荐