HttpClient request payload post请求

最近在做一些爬虫相关的工作,遇到了一个网站,在使用谷歌开发者工具监控的时候,发现他的请求是这样的


我们都知道传统的post请求,所提交的是form data 格式的,key-value键值对的形式提交。这个在爬虫post请求中非常常见。

第一次遇到了这种形式提交的,后面去找了很多方法,发现在百度搜的答案都用不了,后面翻墙去了stackoverflow,这边贴上地址

http://stackoverflow.com/questions/22671897/httpclient-httppost-and-payload

所给的答案我也用不了。

于是去认真研究了一下,发现他所提交的post流,不是传统的key-value模型的数据,而是post一段json文字

仔细查看了HttpClient的一些相关的API后,找到了答案

这边贴上我的小Demo,Demo是用来抓取某个城市的公积金数据的,这边隐藏去账号密码

String str = "password="+"1234"+"\n"
				+"theName="+"XXX先生"+"\n"
				+"year=0\n"
				+"eTime="+DateUtil.getDate()+"\n"
				+"sfz="+"idCardxxxx"+"\n"
				+"orderby=1\n"
				+"sTime=2000-01-01\n";
		
		String loginUrl = "http://www.lszfgjj.gov.cn/ajax/GuestWebGjj_searchUser,App_Web_10rvbinu.ashx?_method=getSearch&_session=r";
		HttpClient httpClient = new HttpClient();
		PostMethod post = new PostMethod(loginUrl);
		post.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
		post.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36");
		post.setRequestHeader("Accept-Language","zh-cn,zh;q=0.8");
		post.setRequestHeader("Accept-Encoding","gzip, deflate, sdch");
		post.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		post.setRequestHeader("Host","www.lszfgjj.gov.cn");
		post.setRequestHeader("Connection","keep-alive");
		post.setRequestHeader("Referer","http://www.lszfgjj.gov.cn/GuestWebGjj/default.aspx");
		RequestEntity entity = new StringRequestEntity(str, "text/html", "utf-8");
		post.setRequestEntity(entity);
		httpClient.executeMethod(post);
		String html = post.getResponseBodyAsString();
		System.out.println(html);
比较关键的两步:

RequestEntity entity = new StringRequestEntity(str, "text/html", "utf-8");
		post.setRequestEntity(entity);


有兴趣的可以研究下StringRequestEntity,在这边将str以参数的形式放入,


以下是需要import的包:

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;

希望能帮到各位。


  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值