当我执行以下 java 程序时,有时我会得到一个空响应,有时我会得到真实(重定向)内容。
ByteArrayOutputStream output = new ByteArrayOutputStream();
URL url = new URL( "https://stackoverflow.com/questions/84629" );
IOUtils.copy( url.openStream(), output );
System.out.println( output.toString() );
网址 https://stackoverflow.com/questions/84629是重定向到 What's your favorite "programmer" cartoon? .
我查看了其他 SO 问题并尝试使用建议的 HttpUrlConnection
,但结果是一样的。响应代码总是 200,但有时会有正确的 html 输出,有时只是一个空字符串。
你能解释一下这里发生了什么吗?
编辑
这是没有 Apache commons 的代码:
ByteArrayOutputStream output = new ByteArrayOutputStream();
URL url = new URI( "https://stackoverflow.com/questions/84629" ).toURL();
InputStream openStream = url.openStream();
byte[] buffer = new byte[ 1024 ];
int size = 0;
while( (size = openStream.read( buffer ) ) != -1 ) {
output.write( buffer, 0, size );
}
System.out.println( output.toString() );
我使用的是 Windows XP 和 Java 1.6.0_17。
我使用 wireshark 捕获了流量:
GET /questions/84629 HTTP/1.1 User-Agent: Java/1.6.0_17 Host: stackoverflow.com Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive HTTP/1.1 200 OK Cache-Control: private Server: Microsoft-IIS/7.0 Date: Tue, 10 Nov 2009 22:42:42 GMT Content-Length: 0
最佳答案
我之前在创建 URL 时遇到过问题,就像您发布的示例一样,我发现解决问题的最佳方法是创建一个 URI然后像这样创建 URL
URL url = uri.toUrl()
我不完全确定你的问题和我的一样,但是当我像你的例子一样创建一个 URL 时,它每次都没有正确编码,这在某些情况下会导致错误,但使用 URI 修复它我。
关于java - 在 java 中读取 URL 的内容 - 重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1710759/