分享12306抢票心得-终极秒杀思路篇
生活随笔
收集整理的這篇文章主要介紹了
分享12306抢票心得-终极秒杀思路篇
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
12306搶票的關(guān)鍵拼的就是整點(diǎn)出票的速度,快的幾秒鐘,慢的幾分鐘,本文提供終極搶票攻略,通過多線程掃描上萬個(gè)CDN,來大幅度提升出票速度。 準(zhǔn)備一:需要了解CDN和切站的機(jī)制,請(qǐng)參考:
- 分享12306秒票殺手锏源碼:http://www.cnblogs.com/guozili/p/3512490.html
- 分享12306搶票心得最終篇:http://www.cnblogs.com/guozili/p/4166675.html
- /otn/leftTicket/queryX 和 /otn/leftTicket/submitOrderRequest
- 具體流程請(qǐng)參考:解析12306訂票流程
- http://blog.csdn.net/lzqwebsoft/article/details/18674635
- 12306對(duì)kyfw.12306.cn用到了全站CDN緩存,至少上萬的CDN IP
- 對(duì)于90%的子頁面使用了CDN緩存
- 部分動(dòng)態(tài)內(nèi)容如個(gè)人中心,CDN將充當(dāng)代理去12306實(shí)際服務(wù)器讀寫數(shù)據(jù),請(qǐng)百度“cdn回源”
- 官方網(wǎng)站的自動(dòng)查詢,每次都會(huì)命中同一臺(tái)CDN
- 拿到的都是CDN緩存數(shù)據(jù),緩存時(shí)間2分鐘
- 所以運(yùn)氣好的話,整點(diǎn)放票較快就能刷出票,一般情況下要等幾十秒才能看到出票
- 參考下圖:
- 360搶票王每次查詢使用不同的CDN,通過內(nèi)置dll插件實(shí)現(xiàn),每次查詢映射不同的IP
- 參考下圖:
- 每次查詢,都會(huì)AJAX Log一下,請(qǐng)參考上面截圖
- 如果登錄狀態(tài)下,cookie的token就被記錄上傳了
- 所以登錄狀態(tài)下刷票容易被踢
- 所以查詢時(shí)動(dòng)態(tài)修改hosts,切CDN,切站點(diǎn),也容易被踢
- 查詢返回的每個(gè)車次結(jié)果,都會(huì)有個(gè)secretStr
- 加密了此車次的所有相關(guān)信息,后續(xù)用于提交訂單用
- 此secretStr幾分鐘后會(huì)過期
- 所以關(guān)鍵就是放票整點(diǎn)后能快速刷出這個(gè)secretStr
- 參考下圖:
?
- 啟用匿名查詢,查詢結(jié)果后返回的secretStr,交給登錄的帳號(hào)做訂單提交
- 目前市面上的搶票神器或收費(fèi)軟件,都是采用了此機(jī)制:
- 啟用多個(gè)線程,主線程帳號(hào)登錄;
- 其他線程并發(fā)匿名作業(yè):輪詢請(qǐng)求不同的CDN查詢票源;
- 查到有票的secretStr,塞給主線程進(jìn)行訂單提交;
- 集成收費(fèi)打碼API,自動(dòng)化點(diǎn)觸驗(yàn)證碼,實(shí)現(xiàn)多開無人值守?fù)屍?/li>
- 做Winform及界面工作量太大,這里提供簡(jiǎn)單的定制方案和一些設(shè)計(jì)思路
- 服務(wù)端:自己建個(gè)本地的IIS Web站點(diǎn),去匿名輪詢請(qǐng)求不同的CDN查詢票源,返回secretStr
- 客戶端:瀏覽器登錄狀態(tài),12306任何一個(gè)頁面,控制臺(tái)或插件植入js腳本,AJAX長輪詢?nèi)フ?qǐng)求服務(wù)端,請(qǐng)求到secretStr做訂單提交
- 自己建個(gè)本地的IIS Web站點(diǎn)或在公網(wǎng)上建,或商業(yè)化做云服務(wù)器分布式的查詢
- 此網(wǎng)站提供接口如:http://127.0.0.1/GetSecretStr...
- 此接口的實(shí)現(xiàn):啟動(dòng)多線程去上萬個(gè)CDN去查詢指定車次日期的票源
- 查到secretStr,馬上返回給客戶端
?
幫助:獲取kyfw.12306.cn的CDN ip,可以去chinaz上去獲取,大概有上千個(gè)
幫助:實(shí)在不夠,我能提供fishlee的一個(gè)IP列表,有上萬個(gè)
終極設(shè)計(jì)思路之服務(wù)端的關(guān)鍵技術(shù):- http://www.cnblogs.com/dudu/archive/2012/07/18/webrequest_dns.html
- 這個(gè)技術(shù),不用修改hosts,使用WebRequest能映射不同的IP
- 參考下圖:
?
?
終極設(shè)計(jì)思路之客戶端:- 瀏覽器登錄狀態(tài),控制臺(tái)或插件植入js腳本
- AJAX長輪詢?nèi)フ?qǐng)求服務(wù)端,請(qǐng)求到secretStr做訂單提交
- 到最后的訂單提交頁,用插件自動(dòng)勾選人,座位,自己手動(dòng)輸入驗(yàn)證碼提交
- 參考下圖:
?
- 3-10秒:此文思路,多線程在10秒內(nèi)對(duì)1萬個(gè)CDN進(jìn)行查詢
- 5-20秒:某收費(fèi)軟件,采用了后臺(tái)多線程查詢CDN
- 10-30秒:fishlee的NET訂票助手,單線程,每隔1秒嘗試不同CDN
- 15-60秒:360搶票王,也是單線程,但CDN數(shù)量不夠
- 20-120秒:官方網(wǎng)站,CDN一般1分鐘內(nèi)不會(huì)變,緩存嚴(yán)重
?
最新更新!- 驗(yàn)證碼問題 參考:http://bbs.fishlee.net/thread-10058-1-1.html
- 現(xiàn)在沒時(shí)間研究 工具 加入驗(yàn)證碼輸入功能,
- 工具源代碼在:https://github.com/guozili/12306
- 基本思路可以實(shí)現(xiàn)下: console工具 要輸入驗(yàn)證碼時(shí),發(fā)送驗(yàn)證碼圖片二進(jìn)制(socket)到 verifycodeWPFInput.exe(實(shí)現(xiàn)一個(gè)WPF程序彈出來)去點(diǎn)擊,然后返回驗(yàn)證碼坐標(biāo)給console
轉(zhuǎn)載于:https://www.cnblogs.com/guozili/p/6144561.html
總結(jié)
以上是生活随笔為你收集整理的分享12306抢票心得-终极秒杀思路篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矿卡崩盘 NVIDIA不好赚了:RTX
- 下一篇: MFC BCGControlBar 库