写在12306抢票之后

/ 0评 / 1

帮女朋友抢票回家,途中经历非常多,今年是第一年抢票,因为作为一个程序员的特别感觉,觉得用网上抢票的不靠谱(实际上靠不靠谱我也不知道),这其中遇到多少问题.

1)验证码问题

验证码是个大坑,使用网上的人的输入验证码流程费时费力,如果自己输入验证码那会更慢,不过我电脑是GTX1080啊,当然机器学习,实际上也已经有对应程序,只要回来训练一下,基本就问题不大.我找到的是 https://github.com/aaronshan/12306-captcha 然后验证码问题解决了,大概识别花了60~100ms左右就能识别一个.机器识别错误就给打码兔识别.

2)缓存问题

12306的数据是从dynamic.12306.cn获取的,这个其实经过了CDN,不过也是,如果不过CDN,怎么扛得住这么大的客流量啊.至于查到的票并不是真的,再提交时候,竟然出错了,提交的数据是缓存数据,在网页上直接就是等待然后说排队人数超过余票人数.CDN服务器非常非常多,虽然有时候提交的是远端的服务器,但是不一定就比本地的慢.哪怕是用国外的服务器,分布式查找IP,也是找到非常之多.

3)异地登录问题

打算多开线程,从不同的CDN服务器拉数据,挂代理,发现12306竟然是不允许多处登陆的,不过,只要拿着自己的cookie,切换CDN是被允许的行为.

4)接续换乘

因为考虑到距离这么远,可能是没有票,于是就把沿途的所有站记录下来,发现一个奇怪的现象,比如说深圳到广州没票,但是深圳到湖南却有票.然后如果长距离没票,短距离也不会有票,短距离没票,长距离还可能有票,这个设计很奇怪啊.

5)查询频率

本来以为查询越快越好,结果12306竟然是有黑洞的,查询快了,有票都给你显示无票,我算了下,大概是200ms左右为安全时间,遇到有票时候增加到100ms一次的频率,也是可以的.

6)验证码过期

刚获取的验证码,竟然告诉我过期了,这怎么能忍,后来发现验证码是从A服务器获取就必须从A服务器返回.不然就会过期,看来是session验证,并且不在前端给反馈.

7)置换cookie

每过一段时间,并且不定的,要置换cookie,不然就说失效,实际上cookie还没失效,这个在12306的网站上没有这个问题,并且也不用换cookie,但是如果频繁查票后,就要换.如果不换就会出各种问题.一般15分钟一次差不多了.

8)时间同步

发现放票3分钟内一定是什么方法都没了,放票的1秒内就没有任何的可以提交的票(都剩下缓存了,缓存还说有,痴心妄想吧.).所以一直跟国家授时中心同步时间,并且59秒开始狂刷.如果知道CDN的后端是哪个服务器,那么完全不用怕了,可惜不知道,如果有人知道,那么12306肯定崩溃死了.难道黄牛知道所以很好抢?

9)并发线程

并发线程不是越多越好,最好把整个流程控制在100ms内连接12306,家用网这点上行别想了,直接上阿里云按量付费服务器吧.然后线程数控制好,不要太快不要太慢,太快,12306也会屏蔽我们,太慢,错过机会.

发表评论

电子邮件地址不会被公开。 必填项已用*标注