ฉันไม่เข้าใจว่าเหตุใด Java HttpURLConnection
จึงไม่ติดตามการเปลี่ยนเส้นทาง HTTP จาก 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();
}
}
}
ผลลัพธ์ของโปรแกรมนี้คือ:
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 จะเปลี่ยนเส้นทางตามที่คาดไว้!?