分享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.pswp.cn/news/255801.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255801.shtml
英文地址,請注明出處:http://en.pswp.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;每一個寫屏…