Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

学校适配指南:如何提交边缘情形? #20

Open
beetcb opened this issue Nov 13, 2021 · 4 comments
Open

学校适配指南:如何提交边缘情形? #20

beetcb opened this issue Nov 13, 2021 · 4 comments

Comments

@beetcb
Copy link
Contributor

beetcb commented Nov 13, 2021

No description provided.

@beetcb beetcb self-assigned this Nov 13, 2021
@beetcb beetcb changed the title 学校适配指南,如何提交边缘情形? 学校适配指南:如何提交边缘情形? Nov 13, 2021
@beetcb
Copy link
Contributor Author

beetcb commented Nov 13, 2021

Cea 使用边缘情形 API 来加载学校配置,这样能极大缩短适配周期。该 API 的数据源就在本项目 ./vercel/data/school-edge-cases.json 文件中,我们要适配自己学校,就是不断补充这个文件,下面我来介绍一下具体做法

比对 formIdx

由于网页元素可能被客户端脚本隐藏,我们需要查看网页源码,才能获得抓包时(无法运行客户端脚本)正确表单的位置

浏览器进入学校统一登陆页,点击右键 => 查看网页源代码CRTL + F 查找字符: <form

找到用密码登录方式的那个表单,计算它在网页中的序号(0 为起始索引)

比如我搜索到了四个结果,用户名密码登录表单在第二个,那么就能得到 formIdx 的值为 1,将此值与 NOTCLOUD 对象中的同字段值比对,有差异则需要在边缘情形文件中增加对于学校的边缘情形:

{
+  "武汉大学": {
+   "formIdx": 1,
+ },
  "NOTCLOUD": {
    "getCaptchaPath": "/getCaptcha.htl",
    "checkCaptchaPath": "/checkNeedCaptcha.htl",
    "formIdx": 2,
    "pwdEncrypt": true
  }
}

比对检查验证码接口路径 checkCaptchaPath

在输入用户名,点击密码时,统一登陆网页会请求一个接口检查是否需要验证码。很不幸,这个接口的路径各异,也需要特殊处理。

我们在浏览器内打开调试工具,切换到 Network 标签下。刷新网页,填入用户名,点击密码输入框,在点击的瞬间会出现新的请求,后缀类似 /checkNeedCaptcha.htl,这个值便是我们的 checkCaptchaPath 字段的值;同上,比对后有差异就需要填入边缘情形:

{
+  "武汉大学": {
+   "formIdx": 1,
+   "checkCaptchaPath": "/needCaptcha.html"
+ },
  "NOTCLOUD": {
    "getCaptchaPath": "/getCaptcha.htl",
    "checkCaptchaPath": "/checkNeedCaptcha.htl",
    "formIdx": 2,
    "pwdEncrypt": true
  }
}

比对获取验证码路径 getCaptchaPath

同上一步检查验证码接口路径一样,我们还是用 Network 标签页监听请求,3 次输入错误的账号密码,再次输入密码时就能看到获取验证码的接口路径,类似于 /sliderCaptcha.do,同样,比对后有差异则填进边缘情形数据源里:

{
+  "武汉大学": {
+   "formIdx": 1,
+   "checkCaptchaPath": "/needCaptcha.html"
+    "getCaptchaPath": "/sliderCaptcha.do"
+ },
  "NOTCLOUD": {
    "getCaptchaPath": "/getCaptcha.htl",
    "checkCaptchaPath": "/checkNeedCaptcha.htl",
    "formIdx": 2,
    "pwdEncrypt": true
  }
}

比对提交表单中的验证码提交名称 submitCaptchakey

输入验证码和测试账号,登录,在最终的登录请求体中能找到
比如我输入 fake 作为验证码,此请求类似于下图:

image

通过红色矩形区域的字段可以看出,这个 key 就是 captcha,同上比对(添加)

提交 PR

你可以使用 localEdgeCasesFile 配置字段来本地测试,如果成功,请你回馈社区,提交 PR 使更多同学收益

具体过程就是修改 ./vercel/data/school-edge-cases.json 文件,然后我们就可以 Commit 并提交 PR 了,当 PR 被 Merge 之后,Vercel 将自动部署新的 API,届时重新用 Cea 在线加载学校的用户也可以适配 🎉

@linrusheng123
Copy link
Contributor

"福建农林大学": {
"formIdx": 0,
"checkCaptchaPath": "/needCaptcha.html",
"getCaptchaPath": "/captcha.html"
},

@beetcb
Copy link
Contributor Author

beetcb commented Dec 7, 2021

@linrusheng123 👍,方便直接提交 PR 吗

@linrusheng123
Copy link
Contributor

@linrusheng123 👍,方便直接提交 PR 吗

好的 我尝试一下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants