问题
当我尝试使用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)
谢谢你的哥们!
**编辑:**Hum ...对不起,刚刚找到解决方案:
Jsoup.connect(url).timeout(0).get();
希望对其他人有用... :)
#1 热门回答(134 赞)
我想你可以做到
Jsoup.connect("...").timeout(10*1000).get();
将超时设置为10秒
#2 热门回答(24 赞)
好的 - 所以,我尝试将此作为对MarcoS答案的编辑,但编辑被拒绝了。不过,以下信息可能对未来的访问者有用:
根据javadocs,默认timeoutfor anorg.jsoup.Connection
是30秒。
如已经提到的,这可以使用timeout(int millis)
来设置
另外,如编辑中的OP注释,也可以使用timeout(0)
进行设置。但是,正如javadocs所述:
超时为零被视为无限超时。
#3 热门回答(1 赞)
在https://jsoup.org/apidocs/org/jsoup/Connection.html上有错误。默认超时不是30秒。这是3秒。只需在代码中查看javadoc即可。它说3000毫秒。