问题:
I can't understand why Java's HttpURLConnection
does not follow an HTTP redirect from an HTTP to an HTTPS URL. 我不明白为什么Java的HttpURLConnection
不遵循从HTTP到HTTPS URL的HTTP重定向。 I use the following code to get the page at https://httpstat.us/ : 我使用以下代码在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();
}
}
}
The output of this program is: 该程序的输出为:
Original URL: http://httpstat.us/301 Connected to: http://httpstat.us/301 HTTP response code received: 301 HTTP response message received: Moved Permanently
A request to http://httpstat.us/301 returns the following (shortened) response (which seems absolutely right!): 对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
Unfortunately, Java's HttpURLConnection
does not follow the redirect! 不幸的是,Java的HttpURLConnection
没有遵循重定向!
Note that if you change the original URL to HTTPS ( https://httpstat.us/301 ), Java will follow the redirect as expected!? 请注意,如果将原始URL更改为HTTPS( https://httpstat.us/301 ),Java 将按照预期进行重定向!