【发布时间】:2011-09-28 03:08:23
【问题描述】:
当我尝试使用 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)
【问题讨论】:
-
您在编辑中添加的代码将超时设置为无限。这在大多数用例中是不可取的。最好使用 MarcoS 答案中指示的特定超时,即使超时很长。
-
我猜
timeout(0)会让Jsoup一次又一次地连接url直到它连接。 -
这似乎是问题作者C. Maillard
Jsoup.connect(url).timeout(0).get();根据earlier revision找到的解决方案