2015-05-29 191 views
1
的execute()

我得到一個SocketTimeoutException當我嘗試使用Jsoup解析HTML頁面:SocketTimeoutException上使用Jsoup

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) 

我用這部分代碼解析的頁面,因爲我找的響應像200404等。

String userAgent = "Mozilla/5.0 (jsoup)"; 
int timeout = 5 * 1000; 
Document localDoc = null; 
String url = "<url>"; 
Connection.Response response = Jsoup.connect(url).userAgent(userAgent).timeout(timeout).execute(); 
if(response.statusCode() == 200) { 
    localDoc = Jsoup.parse(response.body()); 
    //do the stuff.. 
} 

我也碰到過,如果我們使用.get()代替.execute()我們可以擺脫SocketTimeoutException問題的,但如果我用.get()那麼我是不是能夠得到響應。

請建議我使用哪一個來擺脫SocketTimeoutException,並在試圖解析頁面時獲得response

在此先感謝。

+0

嘗試'超時(10 * 1000).get();',它工作嗎?否則,您可以使用標準的Java類從URL中以字符串形式下載HTML,然後使用Jsoup進行解析。 (請參閱http://stackoverflow.com/questions/4328711/read-url-to-string-in-few-lines-of-java-code)。你的網址是什麼? – JonasCz

+0

yep @JonasCz我已經使用過..但是如果我使用get(),我怎麼能得到響應。請幫助我,如果你知道如何獲得響應狀態,如果我使用get()方法 –

+1

嘗試'localDoc = response.parse();',而不是'localDoc = Jsoup.parse(response.body());'' 。錯過了您需要回復代碼,對不起。用'.get()'你不能有響應代碼。否則,請嘗試將標準類下載爲字符串,然後進行解析。 – JonasCz

回答

0

我也碰到過,如果我們使用獲得()而不是.execute(),我們可以擺脫SocketTimeoutException問題

的你可以在位於你的帖子調用棧看,該get()方法內部調用​​方法:

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)<-- execute() called 
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)<-- ...from get(). 
at app.ForumCrawler.crawl(ForumCrawler.java:50) 

所以你不能擺脫SocketTimeoutException。但是,您可以通過處理此異常來加強您的代碼。