Java가 HttpURLConnection
HTTP에서 HTTPS URL 로의 HTTP 리디렉션을 따르지 않는 이유를 이해할 수 없습니다 . 다음 코드를 사용하여 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();
}
}
}
이 프로그램의 출력은 다음과 같습니다.
원래 URL : 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 가 예상대로 리디렉션을 따릅니다!?