查看页面源与HTTPURLConnection

时间:2011-12-08 11:06:44

标签: java html

这可能是一个愚蠢的问题,答案显而易见......但我无法得到它。

我正在尝试使用java程序阅读网页srouce,如下所示:

URL url = new URL(urlValue);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
BufferedInputStream buffer = new BufferedInputStream(urlc.getInputStream());
StringBuilder builder = new StringBuilder();
byte[] by = new byte[1024];
int byteRead;
while ((byteRead = buffer.read(by)) != -1){
    builder.append(new String(by, 0, byteRead));
}
buffer.close();

这一切都运行正常,我可以看到页面源... 当我在浏览器中打开相同的URL并右键单击它并查看页面源时。 java程序的页面源与我在浏览器中看到的不一样。

我只想知道原因。 我错过了什么吗? 我该怎么做才能从java程序中得到完全相同的结果?

谢谢, 伊尔凡

4 个答案:

答案 0 :(得分:0)

根据网站逻辑,您的应用程序也可能被User-Agent过滤。

尝试使用不同的“User-Agent”标头。

没有获得正确页面的另一个原因是您不处理重定向。例如,如果您打开wsj.com,您的浏览器将自动重定向到online.wsj.com。为了管理这种情况,请查看实现此功能的apache httpclient库。

答案 1 :(得分:0)

  1. 我认为你的页面里面有其他页面的引用。当您的浏览器自动通过这些引用读取文档时,您应该解析您已获得的html并手动读取引用(或使用某些框架)
  2. 网站(urlValue)可以理解您是机器人(通过User-Agent)并且不返回页面内容。尝试通过tcpmon嗅探你的连接。

答案 2 :(得分:0)

我不会这样做。

builder.append(new String(by, 0, byteRead));

相反,将所有字节读入ByteArrayOutputStream,然后转换为String。

对于UTF-8或类似的字符集,一个符号并不总是一个字节。读入缓冲区的最后一个字节可能是多字节字符的一部分。当您转换为String时,String可能不正确,因为最后一个字符未完成。

答案 3 :(得分:0)

urlc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");

通过添加此行将解决您的问题。我正在研究这个领域,我发现这个主题没有解决方案,但最终我尝试了各种方法,这显示了我想要的东西。