Я отримую SocketTimeoutException, коли намагаюся розбирати багато документів HTML за допомогою Jsoup.
Наприклад, я отримав список посилань:
<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)
Дякую друзям!
EDIT: Гум ... Вибачте, щойно знайшли рішення:
Jsoup.connect(url).timeout(0).get();
Сподіваюся, що може бути корисним для когось іншого ... :)
timeout(0)
змусить Jsoup підключати URL знову і знову, поки він не підключиться.