/**
* 2018-2-3 21:15:16
* @Description: 模拟登陆正方教务获取成绩HTML页面,并利用正则表达式提取成绩信息
* @version: 1.0
* @author: dawuit
*/
本程序以北京师范大学珠海分校为例
预备知识:
- HTTP协议
- session和cookie保持登陆状态机制
原理:
当我们输入学号、密码后点击登陆,浏览器会把我们的学号、密码或者验证码,post到服务器的一个地址,服务器接受到POST请求后,首先验证验证码是否正确,然后验证学号、密码是否正确,如果其中有一个不正确的话,直接返回验证码错误或者学号不存在或者密码错误。如果匹配正确,那么服务器会生成随机串(就是SessionId)来表示登陆成功的状态,并返回给浏览器,浏览器得到这个串之后,作为cookies保存在浏览器,每次要获取登陆后里面的数据时都会提交这个串来验证是否已经登陆。
一、分析
1.本例没有验证码,如果有验证码可以爬取验证码图片,借助图像处理库(opencv等)进行识别,获取识别结果后添加到POST请求中。
2.对登陆过程进行抓包,我们可以看到POST提交的表单信息,其中最重要的就是RadioButtonList1、TextBox1、TextBox2这三个字段,分别对应登陆身份、学号、密码。其他字段信息可以直接复制提交。
3.密码错误则服务器返回原页面信息,其中有“密码错误”字样,利用正则表达式匹配即可判断密码正确与否(不知正则表达式可自行百度)。登陆成功返回304状态码重定向到http://es.bnuz.edu.cn/xs_main.aspx页面。并且返回从cookie字段返回sessionID,这时候我们要从响应头中获取这个值,并在以后对成绩页面的请求中以cookie字段带上此值,以保持登陆状态。