分享12306搶票心得-終極秒殺思路篇

来源:http://www.cnblogs.com/guozili/archive/2016/12/08/6144561.html
-Advertisement-
Play Games

12306搶票的關鍵拼的就是整點出票的速度,快的幾秒鐘,慢的幾分鐘,本文提供終極搶票攻略,通過多線程掃描上萬個CDN,來大幅度提升出票速度,最終快人一步搶到票 ...


  12306搶票的關鍵拼的就是整點出票的速度,快的幾秒鐘,慢的幾分鐘,本文提供終極搶票攻略,通過多線程掃描上萬個CDN,來大幅度提升出票速度。       準備一:需要瞭解CDN和切站的機制,請參考:       準備二:需要熟悉12306最重要的查詢介面和下單介面及傳入的參數規範       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分鐘內不會變,緩存嚴重
              最終實現效果圖:       

 

    最後祝大家都能買到春節回家的心儀的票票!

 

            
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如圖,獲取網站中問號後的參數值。 ...
  • 問題很簡單,做個上傳文件的頁面。 html頁面中簡單兩行代碼就完成基本的文件上傳頁面。如下圖。解決。 /***************************分割線********************/ 此時又來了一個新問題:如何獲取用戶上傳的這個文件的文件名、文件大小、文件類型? 效果如下圖。 ...
  • 一、負邊距與浮動佈局 1.1、負邊距 所謂的負邊距就是margin取負值的情況,如margin:-100px,margin:-100%。當一個元素與另一個元素margin取負值時將拉近距離。常見的功能如下: 1.1.1、向上移動 當多個元素同時從標準流中脫離開來時,如果前一個元素的寬度為100%寬度 ...
  • 一、標簽概述 1.HTML(英文Hyper Text Markup Language的縮寫)中文譯為“超文本標簽語言”,主要是通過HTML標簽對網頁中的文本、圖片、聲音等內容進行描述。 2.標簽分為嵌套關係與併列關係。 嵌套關係: 併列關係: 二、基本標簽 1.html標簽:作為整個html中所有標 ...
  • bootstrap框架提供了很多好用的javascript組件,可以很方便的實現常用的js效果,比如點擊彈出一個div(modal)、下拉菜單、旋轉木馬(carousel或slider),非常適合前端不專業的後端程式員使用。下麵就來看下modal和carousel如何使用。 modal即點擊彈出di ...
  • [1]原理 [2]標記清除 [3]引用計數 [4]性能問題 [5]記憶體管理 ...
  • G2 2.2.0, 『微小,但是美好的改變。』 # 一、豐富可視化交互形式 #### 選擇: [圖形的單選、多選](https://g2.alipay.com/tutorial/geom-select.html)以及[框選](https://g2.alipay.com/tutorial/ranges ...
  • 1.ECMAScript數值的範圍 由於記憶體的限制,在大多數瀏覽器中,ECMAScript能夠拿保存的數據的範圍是 5e-324 ~ 1.7976931348623157e+308,其中最小的數值保存在Number.MIN_VALUE中,最大的數值保存在Number.MAX_VALUE中。 如果在計 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...