您的位置:首页 > 理论基础 > 计算机网络

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

2014-08-26 13:57 477 查看
之前在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);



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: