java - 在 java 中读取 URL 的内容 - 重定向问题

标签 java url redirect

当我执行以下 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/

相关文章:

java - 带有spring的jsp中不显示图像

java - Java 中的非重定向 HttpURLConnection 请求没有答案

ruby-on-rails - 不同环境的不同nginx配置

java.lang.String 无法转换为 com.example.expandablelistview.NewsItem

Java 序列化没有按我的预期工作

macos - Mac应用商店: URL to open the list of the apps of one developer in Mac Appstore from an OSX app?

java - 将多个参数作为一个 http 查询参数传递的最佳方法是什么?

http - 不需要的 HTTPS -> 使用 nginx + uwsgi + flask app 进行 HTTP 重定向

java - 在 JPA 查询中,我可以将属性顺序和 DESC/ASC 顺序作为方法签名中的参数传递吗?

javascript - JS中从大小为n的数组中随机选取m个整数