尝试获取www.palringo.com
时,我从URLConnection收到的重定向重定向错误太多了
URL url = new URL("http://www.palringo.com/");
HttpURLConnection.setFollowRedirects(true);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
System.out.println("Response code = " + connection.getResponseCode());
输出可怕的:
Exception in thread "main" java.net.ProtocolException: Server redirected too many times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
根据wget,只有一个重定向,从www.palringo.com
到www.palringo.com/en/gb/
我的请求为/en/gb
使用URLConnection的任何想法导致同一资源的另一个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());
输出:
Response code = 302
Redirected to /en/gb/
因此是一个无限重定向循环。
有趣的是,虽然浏览器和wget处理它,但curl不会:
joel@bohr:/tmp$ curl http://www.palringo.com/en/gb/
curl: (7) couldn't connect to host
/en/gb/
的请求被重定向到/en/gb/
一次。
答案 0 :(得分:12)
问题是你的HttpURLConnection
(或者你使用的任何代码 - 抱歉,我不熟悉Java)不使用 cookies 。
在浏览器中禁用Cookie并观察完全相同的行为 - 无限重定向。
原因:服务器检查是否设置了cookie。如果没有设置 - 它设置它并重定向。由于不支持/禁用cookie,因此服务器端的脚本会反复重定向。
解决方案:为您的代码启用/添加Cookie支持,然后重试。
答案 1 :(得分:0)
我认为重定向的定义类似于/ * - > / EN / GB 因此,当您到达/ en / gb时,重定向规则再次起作用。
检查重定向规则。他们在哪里定义?在apache web服务器或其他地方?选择所有。验证这是(或不是)案例并相应地修复规则。
答案 2 :(得分:0)
问题出在服务器端。它可能是一个破坏的Apache httpd重写规则,它发送重定向循环回到同一个地方。它可能是别的东西。无论是什么,你都不太可能在客户端修复它。
我基本上运行了一个爬虫,只是注意到了这个问题。
阿
它可能是一种反爬虫防御措施。 “嗯......看起来像是那些讨厌我的robots.txt文件的讨厌的爬虫之一,浪费了我所有的带宽并窃取了我的宝贵内容。让他在重定向循环中给他带来一些痛苦!”
检查您的抓取工具是否遵守“robots.txt”协议。检查您要抓取的网站的ToS,看看您正在做什么是允许的。
你可能是对的,但如果是这样的话,wget和浏览器如何通过一次重定向来处理这个问题?
可能是因为服务器正在查看请求标头,或者是您的请求模式。
我Terms of Service(我看到)说:
“您同意不使用本服务:... xiii - 未经Palringo明确书面许可,出于任何目的运行任何自动化系统,流程,脚本或机器人。”
可以说,抓取他们的网站违反了这一点。
答案 3 :(得分:0)
如果您尝试连接到需要身份验证的服务,并且提供了错误的用户名和密码,也会出现此错误。