防止连接关闭JSoup
问题描述:
我而不是非常熟悉它与网络(即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或其他任何东西,我试图解析一篇关于元标签内容的新闻文章。不,我不爬行:我有一个网址,我正在浏览那一页。
答
可能你必须发送一些标题数据如下。 请尝试。
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();
答
我绝对不知道为什么,但是当我做
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");
...
这使得完全没有意义,我的问题停止。但是它就是这样啊。我听说过“建设者逃跑”,这是我导致分居的原因。虽然这可能不是一回事,但是一些类似的巫术可能会在引擎盖下发生,我只是不明白。
关闭连接可能有几个原因 - 服务器期望用户代理字符串或从不同页面获得的某个cookie。如果您添加了您想要获取的特定网址,则可以说明。 – TDG
@learner,如果我的回答对您有帮助,请考虑将其提升并接受为正确答案。 – Hasanaga