WebMagic中使用POST请求并传递参数
2017-03-10 15:23
309 查看
Maven依赖
尽量使用最新版本的webmagic<dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.6.1</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.6.1</version> </dependency>
发起POST请求
//设置POST请求 Request request = new Request("http://PostRequestUrl.com"); //只有POST请求才可以添加附加参数 request.setMethod(HttpConstant.Method.POST); //设置POST参数 List<NameValuePair> nvs = new ArrayList<NameValuePair>(); nvs.add(new BasicNameValuePair("key1", "value1")); nvs.add(new BasicNameValuePair("key2", "value2")); nvs.add(......); //转换为键值对数组 NameValuePair[] values = nvs.toArray(new NameValuePair[] {}); //将键值对数组添加到map中 Map<String, Object> params = new HashMap<String, Object>(); //key必须是:nameValuePair params.put("nameValuePair", values); //设置request参数 request.setExtras(params); // 开始执行 try { Spider.create(new MyPageProcessor()).addRequest(request).thread(5).run(); } catch (Exception e) { e.printStackTrace(); }
为什么参数map的key必须要用”nameValuePair”
类 us.codecraft.webmagic.downloader.HttpClientDownloader 中的selectRequestMethod(us.codecraft.webmagic.Request)方法protected RequestBuilder selectRequestMethod(Request request) { String method = request.getMethod(); if (method == null || method.equalsIgnoreCase(HttpConstant.Method.GET)) { //default get return RequestBuilder.get(); } else if (method.equalsIgnoreCase(HttpConstant.Method.POST)) { //只有POST方法才会对request中的附加参数做处理 RequestBuilder requestBuilder = RequestBuilder.post(); //这里,从request中get时,key为:nameValuePair NameValuePair[] nameValuePair = (NameValuePair[]) request.getExtra("nameValuePair"); if (nameValuePair != null && nameValuePair.length > 0) { requestBuilder.addParameters(nameValuePair); } return requestBuilder; } else if (method.equalsIgnoreCase(HttpConstant.Method.HEAD)) { return RequestBuilder.head(); } else if (method.equalsIgnoreCase(HttpConstant.Method.PUT)) { return RequestBuilder.put(); } else if (method.equalsIgnoreCase(HttpConstant.Method.DELETE)) { return RequestBuilder.delete(); } else if (method.equalsIgnoreCase(HttpConstant.Method.TRACE)) { return RequestBuilder.trace(); } throw new IllegalArgumentException("Illegal HTTP Method " + method); }
相关文章推荐
- volley框架下,使用post方式请求服务器,传递参数和头
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- 使用 RestTemplate 发送 post 请求传递参数
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- Jersey使用总结一(jersey初步使用和简单post请求几种参数传递,String方式,不含对象操作)
- Android学习笔记_16_添加多个Activity、参数传递、请求码和结果码使用
- Spring MVC 中使用ajax发送POST请求时的参数问题
- 使用ASI传递post表单..参数是数组
- web开发N例-案例3:使用post和get方法在php和html间传递参数
- JS: 打开新窗口时(open window),使用传递post参数
- ajax使用POST传递参数
- WebApi系列~实际项目中如何使用HttpClient向web api发异步Get和Post请求并且参数于具体实体类型
- Ajax中使用Post提交 中文及参数传递问题
- Android学习笔记_16_添加多个Activity、参数传递、请求码和结果码使用
- 使用ASI传递post表单..参数是数组
- 向Url发送post请求传递参数
- 关于form表单同时使用POST和GET传递参数说明
- WebApi系列~实际项目中如何使用HttpClient向web api发异步Get和Post请求并且参数于具体实体类型
- Android中使用Post带参数请求的方法
- ajax参数传递之[HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete]请求