使用Java读取网页(html)的两种方式之间的区别

时间:2014-02-10 02:56:30

标签: java html internet-explorer http httpurlconnection

第一种方式只是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的第一个方法会返回与我从IE中读取的html不同的html?缺少标签,车厢返回数量不同(问题2)

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

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

网站根据不同的内容提供不同的输出,例如用户代理,发送的接受标头,可用的Cookie /会话,接受的语言标头等

这些东西会改变服务的html,因为它适应客户的需求。

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