Recibo una SocketTimeoutException cuando intento analizar muchos documentos HTML usando Jsoup.
Por ejemplo, tengo una lista de enlaces:
<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>
Para cada enlace, analizo el documento vinculado a la URL (del atributo href) para obtener otros datos en esas páginas.
Así que puedo imaginar que lleva mucho tiempo, pero ¿cómo cerrar esta excepción?
Aquí está todo el seguimiento de la pila:
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)
¡Gracias amigos!
EDITAR: Hum ... Lo siento, acabo de encontrar la solución:
Jsoup.connect(url).timeout(0).get();
Espero que pueda ser útil para alguien más ... :)
timeout(0)
hará que Jsoup conecte la URL una y otra vez hasta que se conecte.