登录流程分析
1.首先,我们可以在登录 这个界面进行登录操作。
然后,当我们输入用户名和密码,并输入正确的验证码后,浏览器就会向12306服务器发送我们的登录请求。因此,我们如果要实现自动登录过程,就必须模拟这个操作,通过 Firefox 浏览器自带的开发者工具,我们可以很方便的对这整个过程进行抓包,得到相应的登录接口。
经过笔者这段时间对12306登录流程抓包发现,12306对登录有两套 api,其中一天时间内大部分使用的是下面所要说的第一套接口,第二套接口经常在早上 9:00-11:00 这个时间段内使用(当然,这只是我这两天观察得到,不一定准确)。下面开始分析下这两套登录接口 api:
●第一套接口(大部分时间使用):
1.验证码图片获取接口分析,抓包结果如下图所示:
captcha.png
从上图中可以看到,验证码图片的获取接口 api 为:
https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&{random}
从接口就可以看出这是一个Get操作,参数有4个:
login_site:E module:login rand:sjrand 0.3375607650273108: |
最后一个参数是一个随机数,去除这个随机数,一样能获取到验证码图片,但是为了防止浏览器对同一网址的缓存设置,最好就加上这个随机数参数。
注:图片获取接口服务器会返回一个 Cookie,因此我们需要保存这个 Cookie,后续请求服务器需要用到这个 Cookie。
2.当我们获取到验证码,填写完用户名,密码和验证码后,就会走captcha-check这个流程,服务器首先会对提交的验证码进行检测,抓包如下图所示:
captcha-check
提交的参数如下所示:
form Data
最后看下返回结果:
response
因此,当提交验证码给服务器后,服务器会检测这个验证码,然后返回给我们一个json格式的字符串。通过上图我们可以看到,当 "result_code" 等于"4"时,代表验证码正确;当 "result_code" 不等"4"时,错误信息会在"result_message"中显示。
3.当验证码验证成功后,就会真正走登录接口,抓包如下:
login
对应的表单参数有:
form Data
提交表单结果完成后,服务器会返回一个json字符串结果:
response
从服务器返回结果中,我们可以就可以知道登录的状态了。但是,这里登录流程还没有结束。让我们继续下面的分析:
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。