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);





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章