[技术分析]了解12306购票流程

1,2,3,零咯,几秒钟心仪的票票就被人抢完了,也不知道是不是人手一部传说中的抢票大杀器,针对上面的情况,所以写了下面的内容,如果分析不到位,欢迎大伙指正。

细节如下: 打开登录口

通常,从12306页面上打开登录页面,地址是https://dynamic.12306.cn/otsweb/loginAction.do?method=init,访问该地址时,
加载很多链接.

1.登录

登录过程,需要下面条件:
—-验证码——- [GET]https://dynamic.12306.cn/otsweb/passCodeAction.do?rand=sjrand
—————验证码请求过程也可设置上面的cookie(如果上面未设定cookie)
—————构造HTTPS请求(假设只发包,会出现403提示)
—-随机数——- [GET]https://dynamic.12306.cn/otsweb/loginAction.do?method=loginAysnSuggest
—————随机数请求完成任务如下:
—————Set-Cookie: JSESSIONID=605B4539EA6825A9650AD6C383363E21; Path=/otsweb
—————Set-Cookie: BIGipServerotsweb=2480144650.62495.0000; path=/
—————随机数在登录时会用到,随意设置会引起”拒绝访问”
——本缓存服务器管理员:wssupport@chinanetcenter.com
——Via:hbts175:8361 (Cdn Cache Server V2.0)
——Generated Fri, 18 Jan 2013 07:05:07 GMT by cache.51cdn.com (Cdn Cache Server V2.0)—————正常访问,返回结果如下:
—————{“loginRand”:”754″,”randError”:”Y”}
—-登录验证——- [post] https://dynamic.12306.cn/otsweb/loginAction.do?method=login

整个登录过程如下:
A.先获取验证码
B.再获取随机号
C.POST提交-验证身份 假设分开完成A,B,C请求,还能登录吗?
No.1 —— 验证码
No.2 —— 随机号
No.3 —— POST

熟悉HTTP/HTTPS协议,经常会看到Connection: keep-alive,12306在接受到数据之后,会返回数据给客户端.
如果只是单纯的提交而不接受,会提示403错误.

No.1 验证码(省略)
No.2 随机数(省略)
No.3 验证登录

此处的cookie,在请求回去随机数/验证码时生成(服务器返回set-cookie响应).
POST提交的参数如下:

#################################################################

2.订票

订票过程:
No.1 —— 查询
—— 该过程生成参数ypInfoDetail(查看余票情况)—- (对比参数leftTicketStr)
ypInfoDetail—— 1*****32091*****00003*****0000 // 请看后面ypInfoDetail详解
1*****3209
1*****0000
3*****0000
leftTicketStr —–100685306510068500003014550000
1006853065
1006850000
3014550000
No.2 —— 预订
——–参数leftTicketStr — 判断是否能够订票
No.3 —— 提交购票人信息
——–参数leftTicketStr — 再次确认是否有票可购
订票过程中,核心就是参数leftTicketStr,因为这个参数决定是否有票可买.
No.2与No.3之间的时间间隔,往往就是购票失败的原因.

No.1 查询

No.2 预定 预定——选择车次

^^^^^^^^^^^ypInfoDetail详解^^^^^^^^^^^
参考:http://www.v2ex.com/t/57909

提交信息,获取车票—-<点击预定按钮后,填写购票人信息>

填写完购票人信息,系统会借测是否有票可购

=================================================================
整个购票流程大致如此. 如果成功匹配12306验证码,精确管理”预定/提交订票“这两处,实现抢票应该指日可待.