非get请求及关于post去重

[b]处理非HTTP GET请求[/b]

一般来说,爬虫只会抓取信息展示类的页面,所以基本只会处理HTTP GET方法的数据。但是对于某些场景,模拟POST等方法也是需要的。

0.7.1版本之后,废弃了老的nameValuePair的写法,采用在Request对象上添加Method和requestBody来实现。

Request request = new Request("http://xxx/path");
request.setMethod(HttpConstant.Method.POST);
request.setRequestBody(HttpRequestBody.json("{'id':1}","utf-8"));


HttpRequestBody内置了几种初始化方式,支持最常见的表单提交、json提交等方式。
[table]
|API|说明|
|HttpRequestBody.form(Map\ params, String encoding)|使用表单提交的方式|
|HttpRequestBody.json(String json, String encoding)|使用JSON的方式,json是序列化后的结果|
|HttpRequestBody.xml(String xml, String encoding)|设置xml的方式,xml是序列化后的结果|
|HttpRequestBody.custom(byte[] body, String contentType, String encoding)|设置自定义的requestBody|
[/table]


[b]POST的去重:[/b]
从0.7.1版本开始,POST默认不会去重,详情见:[url]https://github.com/code4craft/webmagic/issues/484[/url]如果想要去重可以自己继承DuplicateRemovedScheduler,重写push方法。

[b]记否去重复方法,非幂等方法不自动去重,需要自己实现[/b]
[table]
|HTTP Method|是否幂等|Safe|
|OPTIONS| yes| yes|
|GET| yes| yes|
|HEAD| yes| yes|
|PUT| yes| no|
|POST| no| no|
|DELETE| yes| no|
|PATCH| no| no|
[/table]

你可能感兴趣的:(webmagic,webmagic)