我不明白为什么Java的HttpURLConnection
不能跟随从HTTP重定向到HTTPS URL。我使用以下代码获取https://httpstat.us/页面:
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStream;
public class Tester {
public static void main(String argv[]) throws Exception{
InputStream is = null;
try {
String httpUrl = "http://httpstat.us/301";
URL resourceUrl = new URL(httpUrl);
HttpURLConnection conn = (HttpURLConnection)resourceUrl.openConnection();
conn.setConnectTimeout(15000);
conn.setReadTimeout(15000);
conn.connect();
is = conn.getInputStream();
System.out.println("Original URL: "+httpUrl);
System.out.println("Connected to: "+conn.getURL());
System.out.println("HTTP response code received: "+conn.getResponseCode());
System.out.println("HTTP response message received: "+conn.getResponseMessage());
} finally {
if (is != null) is.close();
}
}
}
这个程序的输出是:
原始网址:http://httpstat.us/301 连接到:http://httpstat.us/301 收到HTTP响应代码:301 收到HTTP响应消息:永久移动发出对 http://httpstat.us/301 的请求返回了以下(被缩短的)响应(看起来绝对正确!)。
HTTP/1.1 301 Moved Permanently
Cache-Control: private
Content-Length: 21
Content-Type: text/plain; charset=utf-8
Location: https://httpstat.us
不幸的是,Java的HttpURLConnection
不会遵循重定向!
请注意,如果您将原始URL更改为HTTPS(https://httpstat.us/301),Java将按预期跟随重定向!?