一. 前言
在查询教师资格证成绩时,发现可以进行批量查询,于是就分析了一下查询请求的参数和逻辑。成绩查询地址:成绩查询 - 中国教育考试网
二 . 请求分析
1. 首先输入错误的信息请求,通过抓包工具查看,只有一个请求:http://search.neea.edu.cn/QueryMarkUpAction.do?act=doQueryNtceResultsList
2. 查看请求参数,一共七个:act,pram,ksxm,nexturl,xm,zjhm,verify;构造多次请求后,发现act,pram,ksxm,nexturl这四个参数是固定值,xm:姓名,zjhm:证件号码,verify:验证码;既然请求地址和参数都已经知道了,于是写代码进行请求,返回居然是验证码错误。
3. 开始分析验证码。每次点击验证码,都会向服务器发送一次请求:http://search.neea.edu.cn/Imgs.do?act=verify&t=0.3103432370337762,参数act:固定值,t:时间戳,响应都是验证码图片。难道还要手动识别验证码图片内容?
三. 对接打码平台
谷歌搜验证码图片内容识别,列出来好几个打码平台,每个平台都注册比较了一下,发现这个平台相对实惠一点,新用户折扣也还行。直接使用Python的demo,替换掉关键参数,对接成功。
四. 进行请求
1. 首先请求验证码图片,将返回的图片以字节类型保存下来;
2. 调用打码平台,图片内容作为参数,返回了正确的识别内容;
3. 再次请求查询地址,又返回了验证码错误。打码平台识别的内容与手动识别的内容是一致的啊。
五. 再次分析请求
1. 查看请求验证码的请求头与响应头,两者的cookie中都有一个公共参数:verify。
2. 在看请求查询的请求头与响应头,请求头中的cookie中也有一个参数:verify。
3. 将请求验证码的响应头中的cookie值全部作为请求查询的请求头的cookie,请求查询,正确返回了结果。为什么不用请求验证码的请求头中的cookie呢?因为这个cookie没有包含服务器响应的最新信息,服务器一般验证的都是最新的cookie值。
4. 循环请求查询就是批量查询了。
六. 运行环境
PyCharm + Python 3.0 + Win 10