尝试使用基本方法阅读Java中的安全https网站内容时,等待时间长得令人难以置信

时间:2017-05-31 10:49:48

标签: java http https web-scraping jsoup

在阅读并尝试各种方法来阅读网站内容后,我意识到我无法获得安全网页的输入流(或者必须等待几分钟才能获得单一响应)。这些是我可以通过浏览器轻松访问的页面(不涉及代理)。

我尝试的不同修复程序如下:

  • 设置用户代理
  • 重定向后
  • 使用JSoup
  • 照顾编码
  • 使用扫描程序解析流
  • 使用Cookie管理器

两种基本方法似乎最受欢迎,一种使用Jsoup:

Document doc = Jsoup.connect(url)
                     .userAgent(userAgent)
                     .timeout(5000).followRedirects(true).execute().parse();
Elements body = doc.select("body");
System.out.println(body.html());

另一个与vanilla Java:

URL obj = new URL(url);
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", userAgent);
con.setConnectTimeout(5000);
con.setReadTimeout(5000);

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();

执行阶段 https 地址(例如https://en.wikipedia.org/wiki/Java)的执行进入一个痛苦的慢循环(因此也无法从响应中检索到状态代码),或者在第二次尝试的情况下正在获取输入流。这两种方法对于不安全的地址(例如http://www.codingpedia.org/)完全正常 - 切换到HttpURLConnection。

奇怪的是,等待时光盘使用率非常高(> 20 MB /秒)。

非常感谢所有人的帮助!

0 个答案:

没有答案