【问题标题】:Difference between two ways of reading a web page (html) using Java使用 Java 读取网页 (html) 的两种方式之间的区别
【发布时间】:2014-02-10 02:56:29
【问题描述】:

第一种方式就是url.openStream,然后是InputStreamReader,

    StringBuffer temp = new StringBuffer();
    URL url = new URL(addr);
    BufferedReader bf = new BufferedReader(new InputStreamReader(url.openStream(),"ISO-8859-1"), BUFFER_SIZE );
    int charsRead;   
    char[] copyBuffer = new char[BUFFER_SIZE];   
    while ((charsRead = bf.read(copyBuffer, 0, BUFFER_SIZE)) != -1)  { 
        temp.append(copyBuffer, 0, charsRead);
    }
    bf.close();

我发现结果与 IE/Chrome 不同。

第二种方式是先用HttpURLConnection,再用getInputStream,再用InputStreamReader

    URL url = new URL(addr);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();

    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", USER_AGENT);
    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer temp = new StringBuffer();

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

如果我查看源代码,这将准确返回 IE 中的内容。

所以我的问题是

  1. 为什么有时使用 url.openStream 的第一个方法返回的 html 与我从 IE 中读取的不同?有标签缺失,回车数不同(即问题2)

  2. 我注意到第一个方法的 html 有合理的回车。第二种方法中的一种没有回车。 IE 视图源显示比第一种方法更多的回车。这是为什么呢?

谢谢!

【问题讨论】:

  • 您访问了哪个网站来测试您的代码?

标签: java html internet-explorer http httpurlconnection


【解决方案1】:

网站会根据不同的东西给出不同的输出,例如用户代理、发送的接受标头、可用的 cookie/会话、接受的语言标头等

这些东西会改变所提供的 html 以适应客户的需求。

因此,在您的情况下,您有不同的 User-Agent 和其他标头,因此响应可能因此不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2015-04-22
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多