2015-10-15 185 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"); 
... 

这使得完全没有意义,我的问题停止。但是它就是这样啊。我听说过“建设者逃跑”,这是我导致分居的原因。虽然这可能不是一回事,但是一些类似的巫术可能会在引擎盖下发生,我只是不明白。