我正在嘗試編寫一個警報系統來定期刮擦投訴站點,以查找有關我的產品的任何投訴。我正在使用Jsoup。下面是給我錯誤的代碼片段。刮一個網站
doc = Jsoup.connect(finalUrl).timeout(10 * 1000).get();
這給了我錯誤
java.net.SocketException: Unexpected end of file from server
當我複製粘貼相同finalUrl字符串在瀏覽器中,它的工作原理。然後,我嘗試簡單的URL連接
BufferedReader br = null;
try {
URL a = new URL(finalUrl);
URLConnection conn = a.openConnection();
// open the stream and put it into BufferedReader
br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
doc = Jsoup.parse(br.toString());
} catch (IOException e) {
e.printStackTrace();
}
但事實證明,連接本身返回null(br爲空)。現在的問題是,爲什麼粘貼在瀏覽器中的同一個字符串打開網站時沒有任何錯誤?
完整堆棧跟蹤是如下:
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:774)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:771)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
at ComplaintsBoardScraper.main(ComplaintsBoardScraper.java:46)
您的網址是否以'http://'開頭,您的服務器是否允許連接到端口'80'? – ollo 2013-03-11 09:45:17
@ollo yes網址以http://開頭。服務器是一個不在我控制範圍內的遠程服務器。雖然當我在服務器上嘗試「nc」命令時,它說:連接到complaintsboard.com 80端口[tcp/http]成功! – rishi 2013-03-11 14:02:21
你在URL中有沒有非轉義字符,或者是你的應用程序阻止了internetaccess?網址是否重定向到另一個? – ollo 2013-03-11 14:14:17