Joe*_*oel 5 java url redirect http
尝试获取时,我从URLConnection获得了太多重定向重定向错误 www.palringo.com
URL url = new URL("http://www.palringo.com/");
HttpURLConnection.setFollowRedirects(true);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
System.out.println("Response code = " + connection.getResponseCode());
Run Code Online (Sandbox Code Playgroud)
输出可怕的:
Exception in thread "main" java.net.ProtocolException: Server redirected too many times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
据wget的只有一个重定向,从www.palringo.com到www.palringo.com/en/gb/
任何想法为什么我的请求使用URLConnection /en/gb导致相同资源的另一个302响应?
问题的例子如下:
URL url = new URL("http://www.palringo.com/en/gb/");
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Just for testing, use Chrome header, to eliminate "anti-crawler" response!
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30");
System.out.println("Response code = " + connection.getResponseCode());
Run Code Online (Sandbox Code Playgroud)
这输出:
Response code = 302
Redirected to /en/gb/
Run Code Online (Sandbox Code Playgroud)
因此无限重定向循环.
有趣的是,虽然浏览器和wget处理它,curl不会:
joel@bohr:/tmp$ curl http://www.palringo.com/en/gb/
curl: (7) couldn't connect to host
Run Code Online (Sandbox Code Playgroud)
请求/en/gb/被重定向到/en/gb/恰好一次.
Laz*_*One 12
问题是你HttpURLConnection(或者你使用的任何代码 - 抱歉,我不熟悉Java)不使用cookie.
在浏览器中禁用cookie并观察完全相同的行为 - 无限重定向.
原因:服务器检查是否设置了cookie.如果没有设置 - 它设置它并重定向.由于不支持/禁用cookie,因此服务器端的脚本会反复重定向.
解决方案:为您的代码启用/添加cookie支持,然后重试.
| 归档时间: |
|
| 查看次数: |
7517 次 |
| 最近记录: |