【问题标题】:url.openStream() dos not work for some webpagesurl.openStream() 不适用于某些网页
【发布时间】:2017-01-21 07:34:28
【问题描述】:

我有一段代码可以读取 url 页面内容,此代码适用于许多页面,但不适用于以下链接:

http://www.sciencedirect.com/science/article/pii/S1351421012701725?np=y

public static String getDataFromWebPage(String url) {
    try {
        URL urlpage = new URL(url);
        InputStream is = urlpage.openStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = "";
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
        is.close();
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    }
}


public static void main(String[] args) {
    System.out.println("*******************************");
    System.out.println("*******************************");
    System.out.println(getDataFromWebPage("http://www.sciencedirect.com/science/article/pii/S1351421012701725?np=y"));

    System.out.println("*******************************");
    System.out.println("*******************************");

}

这需要很多时间,但在输出中没有得到任何结果(或任何异常)。

服务器是否可能有某种算法不响应机器人的请求?

如何解决这个问题?

【问题讨论】:

  • 附带说明,您应该刷新缓冲区,因为关闭并不总是执行完全刷新。我已经被这个咬过几次了。更好的是,使用资源块

标签: java http url jakarta-ee


【解决方案1】:

您应该使用 httpclient 代替。你会在这里找到一个很好的例子:http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

【讨论】:

  • 亲爱的朋友,如果您尝试此链接的代码,我将不胜感激:sciencedirect.com/science/article/pii/S0278584699000251,是否有任何安全协议可以防止机器人访问?
  • 我将测试该站点,但您的解决方案应处理状态 301(http 重定向)和 cookie。站点返回 301 和 cookie。重定向的 URL 会检查您是否获得了 cookie。如果 cookie 丢失,你被认为是一个可怜的机器人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2016-06-26
  • 2011-12-12
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多