最近在使用httpclient 3.0抓取一些简单的数据。在httpclient访问网站时,总是出现 circular redirect to的异常,在不知疲倦的degoogle后发现以下:
client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
也就是允许循环重定向了,但是异常依旧,报错
org.apache.commons.httpclient.HttpMethodBase processResponseHeaders
警告: Cookie rejected: "$Version=0; $Version=0; $Path=/". Cookie name may not start with $(其实这是一个很重要的提醒,被我忽略了,我依然认为是重定向的问题)
然后继续
method.setFollowRedirects(false); 关闭自动重定向,手动处理
int statuscode = method.getStatusCode();
if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||
(statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||
(statuscode == HttpStatus.SC_SEE_OTHER) ||
(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
//读取新的URL地址
Header header = method.getResponseHeader("location");
if (header != null) {
String newuri = header.getValue();
if ((newuri == null) || (newuri.equals("")))
newuri = "/";
然后发现statuscode一直是 302,location一直指向本页。但是把地址输入浏览器,一直是200,而且是没有重定向的。仔细查看 request header 发现Cookie,于是直接把cookie复制下 加到header中,问题终于解决。
我想是因为服务器会检测cookie,如果没检测到,就会重定向到本页,尤其是有登录的页面。
httpclient redirect 记录
最新推荐文章于 2021-04-15 18:16:23 发布