android超级课程表原理(各大高校教务平台的数据获取原理)

说起来很奇怪,为什么超级课程表火了这么久,关于原理的帖子就从来没出现过。这是我第一次在CSDN写博客,以前都写在自己的网站上了,希望大家能够支持我谢谢。


由于我是长沙理工大学的大二在校生,所以我接下来的演示都是基于长沙理工大学的教务平台来写的,其实大家看懂后,就不会区别于学校了,因为原理都一样。然后我使用android平台进行演示,还是那句话,原理都一样,语言自选。


首先需要准备的工具是HttpWatch,这是抓包需要的工具,然后还有一个jar包,叫Jsoup,这是用来解析网页HTML代码的。其次所以要的类是HttpClient、HttpPost、HttpGet。


先来看看最后的效果图,我实现了获取教务平台的考试成绩和考试座位安排的数据,课程表数据一样的原理获取。



关于android的基本知识及我所用的相应组件就不介绍了,直接开始正文了。


一、使用HttpWatch抓取教务平台的数据。


安装好HttpWatch后,打开IE浏览器,打开HttpWatch,先别点记录,因为还没有进入教务平台网站的。  = =

这是我学校的教务平台网站地址  ,进入后,选择用户登录。好的,此时点击HttpWatch上的记录。


然后输入学号密码, = = 这里我就打上马赛克了,如果开发者真的需要用我学校的教务平台来进行学习,我愿意给你我的学号密码,不过请私下联系我。

输入学号密码后点击登录,等网页完全加载完毕后点击记录边上的取消,这个时候就要对抓下来的数据进行分析了。接下来的演示可能有点傻瓜制 = = 希望秒懂的人谅解一下像我这样的新手。

大家可以看到HttpWatch有上下两块界面,首先看到上面的界面,找到“方法”为Post的那行数据,单击,就可以看到下面的界面出现了相应的内容。首先我们打开POST数据。



大家可以看到有很多参数和数值,但是!!除了我打钩的这三个参数外,其余的参数对于我们开发客户端而言形同虚设。大家可能会问了,在之前那个登陆页面中,明明有验证码需要输入的啊,但为什么在POST数据中,连cCode(验证码)这个参数都形同虚设呢?关于这个问题,我问了很多人,可是最终得到的结果是。。。。应该是这个教务平台的BUG = =  所以大家先别介意没有输入验证码,我跟大家保证,我们不需要输入验证码,也可以登录!!!!


好的,在分析完POST数据后,,我们点击另一个选项卡,“头信息”。


同样,在众多发送的头信息中,我们所需要的只是Cookie,Cookie是什么?从本质上讲,他可以看成你的身份证,也就是说你在接下来的网页操作中,Cookie可以证明操作对象是你而不是别人。好的,关于其余参数的作用,如果你对抓包很有兴趣的话可以继续深究,但是对我们现在做客户端已经无用了~

对了,其实还有一个参数还是相当重要的,那就是在HttpWatch中上方的那个页面中有一列叫做URL,这个就是我们Post或者Get的直接网址,一定要注意!!不然你Post的时候没有Post到相对应的网站就等于白Post了 = =



第一步基本就已经完成了,就是关于使用HttpWatch抓包和分析数据的事基本就已经搞定了~(不过这只是第一个抓包内容,之后还需要抓包的,就是抓成绩或者课表的页面)。



二、将抓下来的数据运用在代码中


 

List<Cookie> cookies; //保存获取的cookie HttpClient client = new DefaultHttpClient(); HttpResponse httpResponse; 
       
String uriAPI = ""; /* 建立HTTP Post连线 */ HttpPost httpRequest = new HttpPost(uriAPI); List<NameValuePair> params = new ArrayList<NameValuePair>(); /** * 以下三个数据就是我们的之前在POST里的数据,不用在意验证码 */ params.add(new BasicNameValuePair("PassWord", "*****"); //这里的密码我用*取代了 params.add(new BasicNameValuePair("UserID", "201150080223"); //这是学号 params.add(new BasicNameValuePair("Sel_Type", "STU")); //以学生身份登录 try { // 发出HTTP request httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // 取得HTTP response httpResponse = client.execute(httpRequest); //执行 // 若状态码为200 ok if (httpResponse.getStatusLine().getStatusCode() == 200) { //返回值正常 // 获取返回的cookie cookies = ((AbstractHttpClient) client).getCookieStore().getCookies(); } else { } } catch (Exception e) { e.printStackTrace(); }

上面的代码应该还是比较易懂的,关于部分不熟悉的类请大家自行阅读API文档哈。

第二步的目的一是将三个数据(学号、密码、登陆身份)Post到教务网站上,另一个是获取到登陆成功后的cookie。


三、继续抓包,不过这次是非常有针对性的抓包
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值