分享12306抢票心得-终极秒杀思路篇

12306抢票的关键拼的就是整点出票的速度,快的几秒钟,慢的几分钟,本文提供终极抢票攻略,通过多线程扫描上万个CDN,来大幅度提升出票速度。
准备一:需要了解CDN和切站的机制,请参考:
  • 分享12306秒票杀手锏源码:http://www.cnblogs.com/guozili/p/3512490.html
  • 分享12306抢票心得最终篇:http://www.cnblogs.com/guozili/p/4166675.html
准备二:需要熟悉12306最重要的查询接口和下单接口及传入的参数规范
  • /otn/leftTicket/queryX 和 /otn/leftTicket/submitOrderRequest
  • 具体流程请参考:解析12306订票流程
    • http://blog.csdn.net/lzqwebsoft/article/details/18674635
12306 CDN研究机制一
  • 12306对kyfw.12306.cn用到了全站CDN缓存,至少上万的CDN IP
  • 对于90%的子页面使用了CDN缓存
  • 部分动态内容如个人中心,CDN将充当代理去12306实际服务器读写数据,请百度“cdn回源”
12306 CDN研究机制二
  • 官方网站的自动查询,每次都会命中同一台CDN
  • 拿到的都是CDN缓存数据,缓存时间2分钟
  • 所以运气好的话,整点放票较快就能刷出票,一般情况下要等几十秒才能看到出票
  • 参考下图:

12306 CDN研究机制三
  • 360抢票王每次查询使用不同的CDN,通过内置dll插件实现,每次查询映射不同的IP
  • 参考下图:
12306 频繁刷票容易被踢的猜测
  • 每次查询,都会AJAX Log一下,请参考上面截图
  • 如果登录状态下,cookie的token就被记录上传了
  • 所以登录状态下刷票容易被踢
  • 所以查询时动态修改hosts,切CDN,切站点,也容易被踢
12306 关于secretStr
  • 查询返回的每个车次结果,都会有个secretStr
  • 加密了此车次的所有相关信息,后续用于提交订单用
  • 此secretStr几分钟后会过期
  • 所以关键就是放票整点后能快速刷出这个secretStr
  • 参考下图:
  •  

12306 查询设计思路
  • 启用匿名查询,查询结果后返回的secretStr,交给登录的帐号做订单提交
  • 目前市面上的抢票神器或收费软件,都是采用了此机制:
    • 启用多个线程,主线程帐号登录;
    • 其他线程并发匿名作业:轮询请求不同的CDN查询票源;
    • 查到有票的secretStr,塞给主线程进行订单提交;
    • 集成收费打码API,自动化点触验证码,实现多开无人值守抢票
终极设计思路:
  • 做Winform及界面工作量太大,这里提供简单的定制方案和一些设计思路
  • 服务端:自己建个本地的IIS Web站点,去匿名轮询请求不同的CDN查询票源,返回secretStr
  • 客户端:浏览器登录状态,12306任何一个页面,控制台或插件植入js脚本,AJAX长轮询去请求服务端,请求到secretStr做订单提交
终极设计思路之服务端:
  • 自己建个本地的IIS Web站点或在公网上建,或商业化做云服务器分布式的查询
  • 此网站提供接口如:http://127.0.0.1/GetSecretStr...
  • 此接口的实现:启动多线程去上万个CDN去查询指定车次日期的票源
  • 查到secretStr,马上返回给客户端

 

  帮助:获取kyfw.12306.cn的CDN ip,可以去chinaz上去获取,大概有上千个

  帮助:实在不够,我能提供fishlee的一个IP列表,有上万个

终极设计思路之服务端的关键技术:
  • http://www.cnblogs.com/dudu/archive/2012/07/18/webrequest_dns.html
  • 这个技术,不用修改hosts,使用WebRequest能映射不同的IP
  • 参考下图:
  •  

 

终极设计思路之客户端:
  • 浏览器登录状态,控制台或插件植入js脚本
  • AJAX长轮询去请求服务端,请求到secretStr做订单提交
  • 到最后的订单提交页,用插件自动勾选人,座位,自己手动输入验证码提交
  • 参考下图:
  •  

测试结果:整点出票秒数,根据自己以前的N次经验
  • 3-10秒:此文思路,多线程在10秒内对1万个CDN进行查询
  • 5-20秒:某收费软件,采用了后台多线程查询CDN
  • 10-30秒:fishlee的NET订票助手,单线程,每隔1秒尝试不同CDN
  • 15-60秒:360抢票王,也是单线程,但CDN数量不够
  • 20-120秒:官方网站,CDN一般1分钟内不会变,缓存严重
最终实现效果图,并附上测试代码:12306.zip        更多平台插件

 

最新更新!
  • 验证码问题 参考:http://bbs.fishlee.net/thread-10058-1-1.html
  • 现在没时间研究 工具 加入验证码输入功能,
  • 工具源代码在:https://github.com/guozili/12306
  • 基本思路可以实现下: console工具 要输入验证码时,发送验证码图片二进制(socket)到 verifycodeWPFInput.exe(实现一个WPF程序弹出来)去点击,然后返回验证码坐标给console

转载于:https://www.cnblogs.com/guozili/p/6144561.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM内幕:Java虚拟机详解

为什么80%的码农都做不了架构师?>>> 这篇文章解释了Java 虚拟机(JVM)的内部架构。下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件。 上图显示的组件分两个章节解释。第一章讨论针对每个线程创建的组件,第二章…

ABB机器人 系统参数配置

系统参数用于定义系统配置并在出厂时根据客户的需要定义。 可使用 FlexPendant 或 RobotStudio Online 编辑系统参数。 此步骤介绍如何查看 系统参数配置。 操作 : 1. 在 ABB 菜单上,点击控制面板。 2. 点击配置。显示选定主题的可用类型列表。 3. 点…

四则运算2开发简介

四则运算2在四则运算1的基础之上,又添加了新的功能,但是我觉得四则运算2的难度比四则运算1增大了很多,我在编程的过程中,遇到的最大难度就是不知该如何更好的融合各个功能之间的关系。 写到现在,四则运算2主要实现了以…

ABB机器人的 备份与恢复

保存内容 备份功能可保存上下文中的所有系统参数、系统模块和程序模块。 备份内容 数据保存于用户指定的目录中。 默认路径可加以设置。 目录分为四个子目录:Backinfo、Home、Rapid 和 Syspar。 System.xml 也保存于包含用户设置的 ../backup (根…

【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)

目录 一、候选框大量重叠问题 1、NMS核心思想 2、 步骤: 3、缺陷 4、改进 1)soft NMS——衰减的方式来减小预测框的分类得分 2)softer nms——增加了位置置信度 二、样本不平衡问题 1、不平滑的来源(3方面) 1&a…

第6章 循环结构

循环语句: 可以让一部分代码,反复执行 1.1 循环语句while while循环: 编写格式:while(条件){ 循环体 } 条件: 当条件是true,就执行循环体,执行完循环体后 程序再次执行while中的条件,如果条件还是true,继续执行循环体 直到条件是false的时候,循环就结束 public class WhileDem…

MongoDB复制集技术

为什么使用MongogDB复制集技术? mysql中:一主一从,一主多从结构存在的问题 1、 fileover(故障转移)a) 选主投票b) 切换 2、 是否对就用透明化 3、 数据补偿的问题a) 两阶段数据补偿 4、 解决方法 mysql中使用MHAVIP b…

Linux文件系统的实现 (图文并茂,比较好)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录&#xff0…

ROS探索总结(一)——ROS简介

随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求。2010年Willow Garage公司发布了开源机器人操作系统ROS(robot operating system),很快在机器人…

利用union判断系统的大小端

int checkCPUendian()//返回1,为小端;反之,为大端; { union{ unsigned int a; unsigned char b; }c; c.a 1; return 1 c.b; }大端模式(Big-endian),是指数据的高字节保存在内存的低地址中,而数据…

ROS探索总结(二)——ROS总体框架

一、 总体结构 根据ROS系统代码的维护者和分布来标示,主要有两大部分:(1)main:核心部分,主要由Willow Garage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个…

【深度学习】——利用pytorch搭建一个完整的深度学习项目(构建模型、加载数据集、参数配置、训练、模型保存、预测)

目录 一、深度学习项目的基本构成 二、实战(猫狗分类) 1、数据集下载 2、dataset.py文件 3、model.py 4、config.py 5、predict.py 一、深度学习项目的基本构成 一个深度学习模型一般包含以下几个文件: datasets文件夹:存放…

GUI登录界面

在这次的作业中,我先使用单选按钮,输入框,复选框设计了一个简单地登录界面。接着我使用了MouseListener将登陆按钮与下一个“查询界面”连接起来。最后我使用了我们本周所学的JFrame框架与事件处理机制设计了一个简单地界面。我所设计的登录界…

浅谈ROS操作系统及其应用趋势

ROS操作系统是最先由斯坦福开发的开源机器人操作系统,目前由willowgarage公司开发和维护,相关的开发社区也很成熟( http://www.ros.org , http://answers.ros.org, http://www.willowgarage.com), 经过几年的发展API也逐渐稳定&a…

CRM项目总结

CRM项目总结 一:开发背景 在公司日益扩大的过程中,不可避免的会伴随着更多问题出现。 对外 : 如何更好的管理客户与公司的关系?如何更及时的了解客户日益发展的需求变化?公司的产品是否真的符合客户需求?以…

js变量和数据类型

转载于:https://www.cnblogs.com/songyinan/p/6181421.html

(九)模板方法模式详解(包含与类加载器不得不说的故事)

作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可。 模板方法模…

阿里云openapi接口使用,PHP,视频直播

1.下载sdk放入项目文件夹中 核心就是aliyun-php-sdk-core,它的配置文件会自动加载相应的类 2.引入文件 include_once LIB_PATH . ORG/aliyun-openapi/aliyun-php-sdk-core/Config.php; 3.配置客户端对象,需要Access Key ID,Access Key Secret $iClientProfile Defa…

Android之网络编程利用PHP操作MySql插入数据(四)

因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近Android网络编程方面的博文会比较多一些,我尽量以最简单的方法给大家分享,让大家明白易懂。如果有什么不对的地方,还…

【常用网址】——opencv等

opencv官网Releases - OpenCVhttps://opencv.org/releases/