chkpwd()将输入的密码用MD5编码,取前30位转大写,然后再拼接上输入的账号以及学校代码(这里的11072就是学校编码,不同学校这里的编码不一样)再使用MD5编码一次,然后截取前30位转大写。最后将值写入到“dsdsdsdsdxcxdfgfg”字段中。chkyzm()方法也类似,是将你输入的验证码使用MD5编码后取前30位转大写,然后再拼上学校代码后进行MD5编码,再截取前30位转大写,最后将值写入到“fgfggfdgtyuuyyuuckjg”字段中。这两段JS也很好地为我们解释了为什么一些字段一开始没有值,但是当表单提交时却又出现了莫名其妙的值。
同样,其他的一些字段,都能从页面里面的JS脚本里面看到对应的编码方法。
那么,知道了这些加密方法之后,我们就可以开始着手进行设计自己的登录程序了。但是在此之前,为了保险起见,还是先测试一下。这里我是用的是Google Chrome上的Poster插件。在吧各种所需要的请求头请求体都填写完整后(验证码是通过浏览器访问验证码页面而直接获得的),点击提交,发现大部分时候还是能成功登录的。但是有些时候就会登录失败。
想了半天都没有突破性的解决方案,后来在一个偶然间,搜到了以前学霸学长的一篇博客,里面揭露的登录失败问题的根本原因:青果教务系统通过判断请求登录页和验证码页的时间差来反爬虫。。。详情请看
So这也提醒了我,后面去模拟登陆的时候要尽可能地减小这个时间差。
前面扯了那么多,其实都是事前准备,下面就要开始撸代码了。我使用的是Okhttp 3。