# 前言

昨天晚上心血来潮,刷新了一下之前自己写的看课表的 app 的课表缓存,结果发现身份认证失败,提示验证码不能为空,看来教务系统又发癫了。。。

# 问题分析

首先看了新版教务系统接口情况,果然给接口加了验证码,我真的谢谢你。。。

并且验证码内容需要作为请求参数之一,无法跳过

然后看了一下另外一个人开发的 app,发现居然能够成功登录???

当时我想着是难道他用了什么不为人知的接口,或者和学校内部人员有什么 py 交易?

但他的 app 已经在 GitHub 上开源了,所以 py 交易什么的完全没必要,应该是用了某个不为人知的没有验证码的接口。(我之前用的接口就是这么来的,无意中在易班上发现的)

于是我直接去翻他的源代码,看看到底是什么神秘接口。

粗略看了一下源代码,发现和我写的接口好像没什么不同,就是多了一个验证码图片的请求环节,但是并没有其他的信息。

然后我又抓了一下包,发现请求里多了一个 RANDOMCODE 参数,在源代码里搜索了一下发现原来是自己看错了代码文件,看到第一版接口文件去了(可见教务系统发了多少次癫,天天改接口。。。我之前也被折磨得够呛)

然而当我满怀期待的浏览代码,想知道到底是什么接口时,发现了一个 ocr 对象。。。

很好,验证码的尽头是 OCR。。。

最后花了一点时间看了一下,就是用 OCR 来解决验证码问题。。。

属于是返璞归真了

我只想说是哪个聪(sha)明(bi)玩意没事给接口加什么验证码,真想狠狠关爱他。

本来以为终于可以把 1.0 版本发布了,结果给我整这一出,如果要加 ocr 功能的话那可能就需要等到考试之后了,现在还要忙着复习没有那么多时间学(是的,边学边做)。

# 后记

就是想吐槽一下这逆天的新版教务系统,全是槽点,都什么年代了,课表的 response 还是和 html 夹在一起的,而且学期课表却是 json 返回,但周课表就是夹 html,不知道是哪年的屎山代码,主打一个祖宗之法不可变是吧。。。

而且整个信息传输还没有使用 TLS 加密,就用自己设计的一个加密 js 对密码进行加密,我不好评价。