我校的成绩查询比较麻烦,教务处系统只能用IE内核访问,我自己的mac访问不了,而且手机也不能访问,正逢碰上一个项目需要能通过学号密码获取成绩,而且学校不给数据库接口,所以通过程序模拟登录抓取信息。整个过程将用两篇文章来阐述,第一篇理论,第二篇实践。
首先,百度××教务处,出来如下页面
在左侧登录,我使用的360极速浏览器,用自带的开发者工具抓包。
点击登录之后,向Logon.do发送了请求,并用POST将学号,密码,验证码传递过去,后面的x和y的来源后面再说,他们并没有实际用途,cookie是在第一次访问教务处就建立的,但是奇怪的是为什么POST内容不是USERNAME=XXXX,而是USERNAME2=&USERNAME=XXX,其实这是因为从教务处网站跳过去的,所以前面有,如果从专门的登录界面过去,就没有前面的。
从这个专门登录界面登录,就不会出现USERNAME2。输入正确的学号,密码,验证码,登录。
从专门的登录界面登录之后看到第一个请求,着代表先向/Logon.do?method=logon发送了一个post请求,然后再GET了/framework/main.jsp页面,前面的post请求之前看到过,是发送的学号,密码,验证码。get请求的响应正文就是显示的页面。
以上就完成了登录,然后我要查询成绩,打开成绩信息,看抓包情况:
首先就GET了http://×××/framework/new_window.jsp?lianjie=&winid=win2,然后就是其他信息。再点击左侧成绩查询:
这回又POST一个请求,然后是待了一个tktime参数的GET请求,这两个比较引人注意,选择查询选项:
这样会默认查询2014-2015第二学期全部成绩,点击查询,
可以看到,有一个POST请求很值得注意,类型为text/html,点开看
它POST了我们选的开课时间等参数,然后返回了成绩,也就是说如果想要自动得到成绩,我需要事先输入学号,密码,和验证码,理论上来说剩下的都可以自动实现。需要用到的软件有Apache,php,并且需要注意的是PHP需要开启cURL功能,具体开启方法也留在下一章详述。