分享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 核心内部组件。 上图显示的组件分两个章节解释。第一章讨论针对每个线程创建的组件,第二章…

【机器视觉】——光源篇(分类、选型)

目录 ​ 一、光源相关知识 1、光的作用 2、光的颜色 二、光源的种类

ABB机器人 系统参数配置

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

MFC BCGControlBar 库 使用方法

安装 BCGControlBar 库到你的计算机: 解压缩 BCGControlBar.zip (比如,到 c:\bcg 目录中)把 c:\bcg\bin 增加到你的 path 环境变量中,运行 Visual C 并且打开 Tools | Options 对话框,切换到Directories 页…

四则运算2开发简介

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

ABB机器人的 备份与恢复

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

flask项目开发中,遇到http 413错误

在flask项目中,上传文件时后台报http 413 Request Entity Too Large 请求体太大错误! 解决的2种方法: 1.在flask配置中设置 MAX_CONTENT_LENGTH的值; 如设置为20M ( MAX_CONTENT_LENGTH20*1024*1024) 这时小于20M的文件都可以上传 相关连接&…

【机器视觉】——畸变与矫正

目录 一、什么是畸变?畸变的原因是什么? 1、径向畸变(桶形畸变和枕形畸变)

ApplicationContextAware 接口

一、这个接口有什么用? 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的be…

Java之泛型练习

package cn.itcast.generics;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;/** 方法一&#xff1a;实现Comparable接口*/ //class Person implements Comparable<Person> {//实现Comparable接口&#xff0c;使得集合元素具备可比较…

ABB 配置文件

配置文件 配置文件是列出系统参数值的文本文件。 注意&#xff1a; 如果该参数指定默认值&#xff0c;那么就不会被列在 配置文件。 控制器中有六个配置区域&#xff0c;配置文件保存为后缀 .CFG文件。 配置文件默认保存在系统文件夹SYSPAR&#xff0c;例如.. \ MySystem\ …

巨杉db

巨杉数据库 and mongo db ,分布式数据库&#xff0c; 转载于:https://www.cnblogs.com/feiyun8616/p/8178116.html

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

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

忙着,快乐着

无比充实的周末&#xff0c;好久没有这样忙过了&#xff0c;周六早上七点多起床去上考研课&#xff0c;上了整整一天&#xff0c;晚上回到寝室用吃饭的时间让自己放松一下&#xff0c;看了一会儿综艺节目&#xff0c;吃晚饭就开始写这次的代码&#xff0c;写累了就去洗洗睡了&a…

ABB Fronius TPS 4000/5000 IRC5 接口

在RobotStudio生成机器人系统时&#xff0c;选择&#xff1a; Power Source option 650-9 Fronius TPS 4000/5000。Fronius的设备类别和设置被激活。此选项支持福尼斯TPS 4000/5000弧焊电机&#xff0c;包括支持三种焊接模式&#xff1a; 1 Job模式 2 修正的Job模式 …

ASP.NET 实现Base64文件流下载PDF

因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上&#xff0c;具体地址忘记了。 //Base64文件流 byte[] buffer Convert.FromBase64String(decodedString); System.IO.Stream iStream new System.IO.MemoryStream(buffer);try{int len…

Viewpager无限循环(首页与尾页平滑过渡)

#Viewpager无限循环(首页与尾页平滑过渡) ##double kill 在网上找了不少的viewpager无限轮播的例子&#xff0c;大部分都是Interger.MAX_VALUES。 滑到最后一页的时候setCurrentItem(0),这样虽然实现了无限轮播&#xff0c;但是当从最后一页跳转到第一页的时候不够优雅。。通过…

【深度学习】——物体检测的难点

目录 一、小物体检测 1、降采样率减小 空洞卷积 2、anchor设计 1&#xff09;统计方法 2&#xff09;anchor边框聚类 3、多尺度训练&#xff08;multi scale training——MST&#xff09; 4、 特征融合 一、小物体检测 在分类任务中&#xff0c;一般物体的大小都差不多&a…

ABB 机器人 通信指令(人机对话):

&#xff08;1&#xff09;清屏指令&#xff1a;TPErase &#xff08;2&#xff09;写屏指令&#xff1a;PWrite String   tring&#xff1a;显示的字符串。(string)在示教器显示屏上显示字符串数据&#xff0c;也可以用“……”形式直接定义字符串&#xff0c;每一个写屏…