在Android上模拟登录广工正方教务系统查询成绩

在Android上模拟登录广工正方教务系统查询成绩这是在博客园里开博以来写的第一篇博客 因为之前看过很多人都有发过关于模拟登录正方软件获取数据的文章 自己觉得挺好玩的便也去动手一做 开始还以为挺难的 但实际做起来还蛮简单的 当然其中还有些小插曲 废话不多说 先 po 两张效果图 界面做得比较随意

大家好,我是讯享网,很高兴认识大家。

这是在博客园里开博以来写的第一篇博客。

因为之前看过很多人都有发过关于模拟登录正方软件获取数据的文章,自己觉得挺好玩的便也去动手一做,开始还以为挺难的,但实际做起来还蛮简单的,当然其中还有些小插曲。

废话不多说,先po两张效果图:

 
讯享网

 

 

 

界面做得比较随意,有空会再完善的。

接下来便说说是如何实现的了。

首先,你得有个抓包工具(其实用浏览器自带的f12工具应该也是可以的,就是比较麻烦),很多人都是用Httpwatch(貌似支持IE跟火狐),这里我就随波逐流,也用Httpwatch。安装好Httpwatch之后便可以直接打开浏览器登录教务系统抓包啦

 

在点击登录按钮的时候记得先点击记录

登录进去之后便可以看到Httpwatch中有数据变化了。

这时先选中方法为Post的这一行(记下此时的URL,后面有用到),再选中Post数据来看看要提交的表单有哪些。

这里面我们只要用到上面圈出的五个参数。

第一个参数“_VIEWSTATE”要自己获得(获取登录首页的html内容然后在里面提取就行了)

第二个参数RadioButtonList1的乱码数值其实是“学生”(有的Httpwatch版本可以显示,有的则是乱码),提交表单时提交“学生”即可;

第三个参数TextBox2是密码;

第四个参数txtSecretCode是登录界面的验证码,有的学校系统可以直接绕过,我学校的则不行(开始看了别人的说可以直接填空写死,结果在这里被坑了好久,最后只能老老实实把验证码加上去),所以具体可不可以还得自己试试;

第五个参数是学号;

(每个学校提交的参数应该都是不同的,不过依葫芦画瓢就行了)

其实表单中还有一个更重要的参数:Cookie

Cookie的值在每一次提交的时候都得加上去,Cookie同“_VIEWSTATE”一样得自己先获得,不过不一样的是Cookie获取一次就可以,但“_VIEWSTATE”必须每次提交都得获取一次。

现在就来提交表单尝试登录

String URL = "http://jwgl.gdut.edu.cn/default2.aspx";//上面说到的URL HttpPost mHttpPost = new HttpPost(URL);//建立连接 mHttpPost.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false);//禁止重定向 mHttpPost.setHeader("Cookie", Cookie);//设置Cookie //填写表单 List<NameValuePair> list = new ArrayList<NameValuePair>(); list.add(new BasicNameValuePair("__VIEWSTATE",viewstate)); list.add(new BasicNameValuePair("txtUserName",学号)); list.add(new BasicNameValuePair("TextBox2", 密码)); list.add(new BasicNameValuePair("RadioButtonList1","学生")); list.add(new BasicNameValuePair("txtSecretCode", 验证码)); //下面几个都直接填空写死即可(事实上下面几个只需添加Button1即可) list.add(new BasicNameValuePair("Button1", "")); list.add(new BasicNameValuePair("lbLanguage", "")); list.add(new BasicNameValuePair("hidPdrs", "")); list.add(new BasicNameValuePair("hidsc", "")); mHttpPost.setEntity(new UrlEncodedFormEntity(list, "GBK"));//提交表单 HttpResponse mHttpResponse = new DefaultHttpClient().execute(mHttpPost);// 响应请求 int statusCode = mHttpResponse.getStatusLine().getStatusCode();//状态码若为200则表示登录失败,此时需检查是否表单有误;若状态码为302则表示成功

讯享网
小讯
上一篇 2025-02-07 09:59
下一篇 2025-03-21 17:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119135.html