Android 开发学习记录(4)---- httpclient使用(三)


之前在Android 开发学习记录(3)---- httpclient使用(二)中介绍了如何使用httpclient访问需要账户登录的网址,当然首先是要有一个合法的登录账户。

但是现在好多网站在登录时不仅仅要求你输入账号、密码,还要求你输入网站随机产生的一个验证码,一般是以图片形式出现。

这次主要就给自己的笔记里记下当时我在访问需要图片验证码时,如何使用 httpclient 的。(当然这里所说的验证信息还是需要用户来手动填写的,本人菜鸟不会图像识别、、、、)注:这种方法并不能保证所有的网站都能如此登录

首先你要知道你要访问的网址都需要填写哪些信息,千万不要仅仅只看网站登录栏的那些信息,这是不够的。需要分析你在登录时到底都发送出那些信息,可以用chrome浏览器或者WireShark抓包软件都是可以做到的。下面就用chrome来演示

首先模拟登陆自己的目标网站(www.你的网址.com),打开“开发者工具”,用自己的账号密码登陆网站。这时你会在开发者工具栏中发现这样一条记录:


从中可以发现这是一个以POST方式发送给目标网站的信息,点进去可以查看里面的详细信息,找到如下信息:


这里就可以发现,在POST给网址的内容中,表单项不仅仅有 id 与 pw(也就是password)项目,这两项是用户手动输入的账户与密码。还有 authm 和 trust_root 这两项,这就是隐藏的需要 POST 的表单信息。验证码这类的同样会出现在这块儿。其中有些数据看起来很随机,需要从之前GET获取到的网址中寻找关联。

此时,以上面截图为例,这种带有隐藏信息的表单填写如下:

client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH);
                				
HttpPost request = new HttpPost("http://ssqzfw.xidian.edu.cn/modules/swyh/servlet/login");

List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                				
/********************header头设置******************************/
postParameters.add(new BasicNameValuePair("account","XXXXXXXXX"));
postParameters.add(new BasicNameValuePair("password","XXXXXXXXX"));
postParameters.add(new BasicNameValuePair("authm","XXXXXXXXX"));
postParameters.add(new BasicNameValuePair("trust_root","XXXXXXXXX"));
/**************************************************/
                				
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = client.execute(request);
                				
String webInformation_1 = readWeb(response);


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值