Python 查询中小学教师资格考试(NTCE)成绩

1,325 阅读2分钟

一. 前言

在查询教师资格证成绩时,发现可以进行批量查询,于是就分析了一下查询请求的参数和逻辑。成绩查询地址:成绩查询 - 中国教育考试网

二 . 请求分析

1. 首先输入错误的信息请求,通过抓包工具查看,只有一个请求:search.neea.edu.cn/QueryMarkUp…

2. 查看请求参数,一共七个:act,pram,ksxm,nexturl,xm,zjhm,verify;构造多次请求后,发现act,pram,ksxm,nexturl这四个参数是固定值,xm:姓名,zjhm:证件号码,verify:验证码;既然请求地址和参数都已经知道了,于是写代码进行请求,返回居然是验证码错误。

3. 开始分析验证码。每次点击验证码,都会向服务器发送一次请求:search.neea.edu.cn/Imgs.do?act…,参数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

七. 详细代码

码云