四、基於HTTPS協議的12306搶票軟體設計與實現--水平DNS併發查詢分享
一、基於HTTPS協議的12306搶票軟體設計與實現--實現效果
二、基於HTTPS協議的12306搶票軟體設計與實現--相關介面以及資料格式
三、基於HTTPS協議的12306搶票軟體設計與實現--垂直查詢效果分享
哎,又過年了,同志們又要搶票回家了,這票賣的可真快啊,瞬間的功夫就沒有票了,一票難求啊!
這兩天閒著沒事,剛好又要搶春節的票了,就把原來寫的搶票軟體給開啟試了一下,發現竟然不能查票了,於是就又改了一下。其實是改了兩下,一是:讓原來的程式能夠用起來(適應新介面),而是加上了水平DNS併發查詢。下面就依次說下吧。
一、介面變更
其實這次12306並沒有大改,只有一下幾個介面改了。
1.1 登陸驗證碼
這個只是去了個action的字尾(.do),不改也沒有問題,但怕以後出問題,就改了一下。
介面:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew
引數:和之前一樣。
1.2 查詢車票
介面:https://kyfw.12306.cn/otn/leftTicket/queryT (後面加了一個T)
引數未變。
1.3 查詢日誌介面
其實這個介面算是新增加的吧,也就是在查詢車票執行前先執行個查詢日誌介面,我實驗了一下,發現不執行這個介面也行,不過查詢車票的介面就會變的慢一點,所以我最後還是加上了,很簡單,只用發下請求就行了。
介面:https://kyfw.12306.cn/otn/leftTicket/log
方法:GET
引數:和查詢車票即可引數一樣。
返回值:不用管。
1.4 獲取聯絡人介面
這個介面也沒有大改,如果你的聯絡人少的話就不用管了。因為我的聯絡人有兩頁,但按照之前我提供的介面的話只能獲取第一頁的聯絡人,導致第二頁的聯絡人不能正常獲取,因此修改為如下:
介面:https://kyfw.12306.cn/otn/passengers/query
方法:GET 或 POST
引數:pageIndex (第幾頁)
pageSize (每頁多少條記錄)
返回值:json格式,稍微解析下就可以了,欄位名字沒有變。
二、水平DNS併發查詢
其實這次改動最大的地方算是加了個水平DNS查詢吧。因為12306是全球都可以訪問的網站,需要提供高併發等功能,因此在各地都提供了多個伺服器,通過DNS解析,不同地區的使用者訪問距離本地最近的伺服器來進行解析,通過這樣12306來分解各地的高併發請求。但這樣的話就造成了另外一個問題,就是不同地區的使用者在同一搶票時間搶相同的火車票,但看到的頁面資料會有差別,有的可以看到剩餘車票,而有的看不到,這是因為他們訪問的不是同一個12306伺服器,不同的快取導致的。
水平DNS查詢的功能簡單來說就是能列出12306各地伺服器相同車票的剩餘情況,看下圖便知。
上圖顯示的就是全球各地12306伺服器同一時間相同車票的顯示情況(我這只是演示,要看到差別,可以在放票的那段時間,可以看到不同的伺服器會顯示不同的結果)。
其實實現也非常簡單,首先通過DNS查詢工具,查詢出12306網站(kyfw.12306.cn)對應的各地的伺服器ip地址,然後每個地區都分別請求相同的車次,然後再table裡面列舉出來即可,簡單吧。
這個功能是非常實用的,可以間接的反應出各地伺服器的反應快慢。最後假如某個地區的車次資訊顯示有票,那麼只需要把程式當前DNS修改一下,讓kyfw.12306.cn域名對應到那個IP地址即可,然後就可以訪問那個IP地址進行異地伺服器訂票。
最後再說下,在我實驗水平DNS查詢的時候,發現如果選擇了異地伺服器進行訂票,會發現你需要在異地伺服器上重新登入下才可以訂票(可以說明12306在全國各地的應用伺服器並沒有共享session)。
相關文章
- 從零實現一款12306搶票軟體
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- 分享12306搶票心得-最終篇
- Python3.6實現12306火車票自動搶票Python
- 12306 出招搶票軟體,技術黃牛生意要“黃”?
- 多家搶票軟體回應12306資料洩漏
- DNS協議 是什麼?說說DNS 完整的查詢過程?DNS協議
- PostgreSQL與12306搶火車票的思考SQL
- 12306對第三方搶票軟體實施限制 平臺:可正常搶票 未受限制
- Python查詢12306餘票Python
- 基於java博網即時通訊軟體的設計與實現Java
- iOS中基於協議的路由設計iOS協議路由
- 基於Http協議的軟體自動升級HTTP協議
- STOMP協議——基於Websocket實現協議Web
- 基於Netty實現自定義訊息通訊協議(協議設計及解析應用實戰)Netty協議
- 最新12306搶票爬蟲爬蟲
- 搶票軟體不靠譜?不如看看用AI怎麼玩轉12306AI
- 基於XMPP協議開發Android即時通訊軟體協議Android
- 是程式設計師就用Python查12306的票程式設計師Python
- 基於 Netty 的可插拔業務通訊協議的實現「1」協議描述及基本訊息物件設計Netty協議物件
- [軟體人生]搶錢的電影與現在的軟體開發
- 實現網站由http協議轉為https協議網站HTTP協議
- 關於PHP高併發搶購系統設計PHP
- 基於執行緒與基於事件的併發程式設計之爭執行緒事件程式設計
- Triple 協議支援 Java 異常回傳的設計與實現協議Java
- Http與Https協議HTTP協議
- 關於JAVA 2 網路協議ftp,tfpt,telnet,dns的實現Java協議FTPDNS
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- 基於UDP協議的Socket網路程式設計UDP協議程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 基於Java+Springboot+Jpa+Mysql實現的線上網盤檔案分享系統功能設計與實現四JavaSpring BootMySql
- Go語言實現HTTPS加密協議GoHTTP加密協議
- 大型網站的 HTTPS 實踐(四):協議層以外的實踐網站HTTP協議
- 大型網站的 HTTPS 實踐(四)——協議層以外的實踐網站HTTP協議
- 火車票軟體分享
- [java併發程式設計]基於訊號量semaphore實現限流器Java程式設計
- 大型網站的 HTTPS 實踐(3):基於協議和配置的優化網站HTTP協議優化
- 大型網站的 HTTPS 實踐(三):基於協議和配置的優化網站HTTP協議優化