Java程序未捕获302重定向状态码,返回200 OK的问题排查
问题原因及解决方案
核心原因:
HttpURLConnection默认开启自动跟随重定向功能。当服务器返回302状态码时,它会自动向Location头指定的URL发起新请求,最终你获取到的是跳转后目标页面的200状态码,而非初始的302。这也是为什么Wireshark能抓到302,但Java代码拿到的是200——抓包捕获的是第一次请求的响应,而代码已经自动完成了跳转。验证方式:调用
connection.getURL()查看最终请求的地址,会发现已经变成了pg_2.php对应的URL,以此确认自动跳转已发生。解决办法:在调用
connect()前禁用自动重定向:URL url = new URL("http://localhost/test/test_page_1.php"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 禁用实例级自动重定向 connection.setInstanceFollowRedirects(false); connection.connect(); var code = connection.getResponseCode(); // 此时将返回302若需要全局禁用所有
HttpURLConnection的自动重定向,可调用静态方法:HttpURLConnection.setFollowRedirects(false);注意实例级设置的优先级高于全局设置。
内容的提问来源于stack exchange,提问作者LakshyaK2011
相关产品推荐
相关产品推荐

