使用JSoup防止连接关闭

时间:2015-10-15 20:58:14

标签: google-app-engine jsoup meta-tags meta

非常了解网络(即http)或JSoup。我正在使用JSoup从url获取元标记内容。我收到了错误

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

这是我的代码

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

我如何"配置" JSoup只是抓取网页的内容,关闭连接,然后继续解析获得的内容?我问这样的问题,因为我想连接的关闭是由于它花了太长时间。或者是别的什么?就像服务器知道它不是人类呼叫者那样?假设该网站是cnn或其他什么,我正在尝试解析元标记内容的新闻文章。不,我没有爬行:我得到了一个网址,我正在筛选那一页。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

我完全不明白为什么,但是当我这样做时,问题就停止了

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");
...

这对我来说完全没有意义。但是它就是这样啊。我听说过“构造者逃跑”,这就是导致我进行分离的原因。虽然这可能不是一回事,但是一些类似的伏都教可能会在我不明白的情况下发生。