上个星期做了一个爬虫,主要是实现手机上不通过标准浏览器的方式实现Facebook认证过程,期间遇到个问题需要手动处理redirect。
HttpClient4.0的GET方法完全redirect,POST方法部分支持redirect,也就是说,我们在大部分情况下爬网页时中间的一些redirect过程可以当作是透明的,输入一个URL得到的是redirect后的最终结果页。
刚好,我需要redirect过程中的一个临时页面的一些信息,而HttpClient4.0 "自作主张"地帮我忽略了,如何手动处理呢?
结过查看其内部源码,HttpClient默认是通过DefaultRedirectHandler来管理跳转的,该类继承自接口,该接口有两个方法
public URI getLocationURI(HttpResponse response, HttpContext context)
throws ProtocolException;
public boolean isRedirectRequested(HttpResponse response,
HttpContext context);
其中isRedirectRequested是用于判断当前的请求是否需要redirect。我们只需要定义一个自己的RedirectHandler来处理redirect就可以了,如下:
public class DummyRedirectHandler implements RedirectHandler {
public URI getLocationURI(HttpResponse response, HttpContext context)
throws ProtocolException {
// TODO Auto-generated method stub
return null;
}
public boolean isRedirectRequested(HttpResponse response,
HttpContext context) {
// 由于我们需要手动处理所有的redirect,所以直接return false
return false;
}
}
AbstractHttpClient类setRedirectHandler方法用于设置自定义RedirectHandler实现
httpclient.setRedirectHandler(new DummyRedirectHandler());
然后通过搬运捕获Header("Location"),可以取得跳转中间过程的URL,希望能帮到像我这样做爬虫天天在网上的童鞋。
分享到:
相关推荐
httpclient4.0所需jar包
httpclient4.0包,希望对大家有用,开发java的可以用到。httpclient4.0
其中有4.1.1jar包、httpclient说明文档doc格式、简单使用例子post\get方式都有,导入类可用。项目中使用很方便!
1.含有官方HttpClient4.0的jar包 2.有之前HttpClient3.0的jar包,就是import importorg.apache.commons.*; 3.包含jsoup,解析HTML的jar包 4.包含jcookie.jar及jtidy-r938.jar的jar包.
httpclient4.0源文件,httpclient4.0源文件,httpclient4.0源文件
httpclient-4.0.jar, httpclient-4.0.jar, httpclient-4.0.jar
Android升级后旧版本的httpclient4.0 apache-mime4j-0.6 commons-codec-1.4 commons-logging-1.1.1 httpclient-4.0.1 httpcore-4.0.1 httpmime-4.0.1
httpclient-4.0-beta1.jar
网上找的,共同分享! HttpClient4.0.3 Tutorial中文翻译!
httpclient-4.0-beta2.jarhttpclient-4.0-beta2.jarhttpclient-4.0-beta2.jarhttpclient-4.0-beta2.jarhttpclient-4.0-beta2.jarhttpclient-4.0-beta2.jarhttpclient-4.0-beta2.jarhttpclient-4.0-beta2.jar
新浪自动发博文的错误解决方法: "code":"B06001","data":null,"ycon_length":null,"jcon_length":null}
NULL 博文链接:https://yhz61010.iteye.com/blog/868036
NULL 博文链接:https://yhz61010.iteye.com/blog/654678
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,...本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。
HttpClient相关jar包 博文链接:https://roomy.iteye.com/blog/681825
myeclipse项目全部文件 博文链接:https://hujin.iteye.com/blog/162502
HttpClient-4.0.1 官方教程,包含HttpClient-4.0.1的基本用法,讲解清晰,格式为PDF
HttpClient4.0.1版本 官方 中文教程。
Apache httpclient 4.5.12版本源码,不包含jar包。适合学习原理,查看各种接口的实现。