2013-06-24 40 views
3

我想用Jsoup抓取的內容從 http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=550633c179112c8002bc6a0942d55b2a&artist=lucinda%20williams&track=lake%20charles如何處理「從服務器意外結束文件」?

的代碼是:

Document doc = Jsoup.connect("http://ws.audioscrobbler.com /2.0/?method=track.getInfo&api_key=550633c179112c8002bc6a0942d55b2a&artist=lucinda williams&track=lake charles") 
         .userAgent("Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0") 
         .timeout(5000) 
         .get(); 

然而,一些錯誤發生:

Exception in thread "main" java.net.SocketException: Unexpected end of file from server 
      at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:770) 
      at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633) 
      at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:767) 
      at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633) 
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1162) 
      at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:397) 
      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:429) 
      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410) 
      at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164) 
      at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153) 
      at JsoupXML.main(JsoupXML.java:16) 

但是,當我使用brwoser訪問網址,eveything是可以的。另外,當我使用上面的代碼抓取http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=550633c179112c8002bc6a0942d55b2a&artist=cher&track=believe的內容時,一切都可以。

你知道解決它的原因和任何好的想法嗎?

感謝您的關注和對我的英語抱歉。

感謝NeplatnyUdaj的善意幫助,你給我提供了很好的提示。 我忘了用%20,%26等替換whitspace和其他特殊符號。

+0

您是否嘗試在瀏覽器中加載頁面?地址後面有一些懷疑的空白。 – NeplatnyUdaj

+0

你真酷 –

回答

0

更改用戶代理(或至少定義它)。

更多細節: Scraping a site

3

嘛。異常意味着遠程服務器意外關閉了連接。

下面的答案假設問題代碼網址中可見的所有空格實際上並不存在於您的代碼中。

除了捕捉異常並再次嘗試(或向用戶報告錯誤)之外,您無能爲力。

至於爲什麼服務器關閉了連接:

  • 它不喜歡你的請求(重試它不會在這裏幫助), 支票的Audioscrobbler
    • 的文件是主機頭在那裏和正確的(在你的例子中這將是不正確的,因爲你有空間在那裏)?
    • 您是否需要包含其他標題才能提出有效請求?
    • API密鑰是否正確?
  • 服務器可能有問題,目前(使其下降的要求,這就是一個重試可能有幫助)
  • 它認爲你是把它做太多的問題,以及一些防垃圾郵件保護一直從事(這是重試會受傷的地方)。

有關說明:在問題中包含API密鑰可能不是最佳選擇。