2015-10-15 133 views
0

而不是非常熟悉它與網絡(即HTTP)或JSoup。我使用JSoup從網址獲取元標記內容。我收到錯誤防止連接關閉JSoup

Connection closed unexpectedly by server at URL: http://blahblah 

這裏是我的代碼

Document doc = Jsoup.connect(url).get(); 
Elements metas = doc.getElementsByTag("meta"); 
... 

如何「配置」 JSoup只獲取網頁的內容,關閉連接,然後進行解析內容獲得?我在問這樣的問題,因爲我想象關閉連接是由於它耗時太長。或者是別的什麼?就像服務器知道它不是人類呼叫者或其他人一樣?說這個網站是cnn或其他任何東西,我試圖解析一篇關於元標籤內容的新聞文章。不,我不爬行:我有一個網址,我正在瀏覽那一頁。

+0

關閉連接可能有幾個原因 - 服務器期望用戶代理字符串或從不同頁面獲得的某個cookie。如果您添加了您想要獲取的特定網址,則可以說明。 – TDG

+0

@learner,如果我的回答對您有幫助,請考慮將其提升並接受爲正確答案。 – Hasanaga

回答

1

可能你必須發送一些標題數據如下。 請嘗試。

Document doc = Jsoup 
    .connect(url.trim()) 
    .timeout(3000) 
    .header("Host", "someip") 
    .header("Connection", "keep-alive") 
    .header("Content-Length", "111") 
    .header("Cache-Control", "max-age=0") 
    .header("Accept", 
      "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") 
    .header("User-Agent", 
      "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36") 
    .header("Content-Type", "application/x-www-form-urlencoded") 
    .header("Referer", url.trim()) 
    .header("Accept-Encoding", "gzip,deflate,sdch") 
    .header("Accept-Language", "en-US,en;q=0.8,ru;q=0.6") 
    .userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36") 
    .get(); 
0

我絕對不知道爲什麼,但是當我做

Connection connection = Jsoup.connect(url); 
Document doc = connection.get(); 
Elements metas = doc.getElementsByTag("meta"); 
... 

而不是

Document doc = Jsoup.connect(url).get(); 
Elements metas = doc.getElementsByTag("meta"); 
... 

這使得完全沒有意義,我的問題停止。但是它就是這樣啊。我聽說過「建設者逃跑」,這是我導致分居的原因。雖然這可能不是一回事,但是一些類似的巫術可能會在引擎蓋下發生,我只是不明白。