这可能是一个愚蠢的问题,答案显而易见......但我无法得到它。
我正在尝试使用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程序中得到完全相同的结果?
谢谢, 伊尔凡
答案 0 :(得分:0)
根据网站逻辑,您的应用程序也可能被User-Agent过滤。
尝试使用不同的“User-Agent”标头。
没有获得正确页面的另一个原因是您不处理重定向。例如,如果您打开wsj.com,您的浏览器将自动重定向到online.wsj.com。为了管理这种情况,请查看实现此功能的apache httpclient库。
答案 1 :(得分:0)
答案 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");
通过添加此行将解决您的问题。我正在研究这个领域,我发现这个主题没有解决方案,但最终我尝试了各种方法,这显示了我想要的东西。