Tôi nhận được SocketTimeoutException khi cố gắng phân tích cú pháp nhiều tài liệu HTML bằng Jsoup.
Ví dụ, tôi có một danh sách các liên kết:
<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>
Đối với mỗi liên kết, tôi phân tích cú pháp tài liệu được liên kết với URL (từ thuộc tính href) để lấy các phần thông tin khác trong các trang đó.
Vì vậy, tôi có thể tưởng tượng rằng nó mất rất nhiều thời gian, nhưng làm thế nào để tắt ngoại lệ này?
Đây là toàn bộ dấu vết ngăn xếp:
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)
Cảm ơn các bạn!
EDIT: Hum ... Xin lỗi, chỉ tìm thấy giải pháp:
Jsoup.connect(url).timeout(0).get();
Hy vọng điều đó có thể hữu ích cho người khác ... :)
timeout(0)
sẽ khiến Jsoup kết nối url nhiều lần cho đến khi nó kết nối.