12306自動刷票下單-下單

12306自動刷票下單-登錄
12306自動刷票下單-查票預定

下單

進入下單界面了
https://kyfw.12306.cn/otn/confirmPassenger/initDc
圖片.png
還有一個請求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs
圖片.png
仔細看一下返回值,是我們常用聯繫人的信息,要下單肯定得選乘客信息嘛。這也是一個post請求,這個REPEAT_SUBMIT_TOKEN=8273d204078ad491f0face93d5c878b9很奇怪,記住,肯定是在它之上的請求中獲取的,
圖片.png
很幸運我們看它上面的那個請求initDc中就出現了,沒錯值是一樣的,又搞定一個圖片.png

選乘客票種提交

https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo
圖片.png

看看參數,頭暈嗎?抹掉的是姓名身份證電話信息,除了REPEAT_SUBMIT_TOKEN和空參數,其他的一頭霧水,你發現REPEAT_SUBMIT_TOKEN和上面的不一樣了是吧,其實是一樣的,因爲我是寫完一部分才進行下面的操作,時間長導致登錄失效,所以提交的時候要求重新登錄,這個REPEAT_SUBMIT_TOKEN參數就不一樣了,也說明這個參數是每次都變化的。
請求有發送的地方,這些參數也必然有填充的地方,向上找,不要放過任何一個請求,css和img請求就算了,然後我們找到了https://kyfw.12306.cn/otn/resources/merged/passengerInfo_js.js?scriptVersion=1.9053
格式化一下,最好是找在線格式化JavaScript代碼的,效果更好
圖片.png
前兩個參數搞定了,然後再看一下getpassengerTickets和getOldPassengers函數
圖片.png

passengerTicketStr:O,0,1,xxx,1,xxxxx,xxxxx,N
座位類型,0,票類型(成人/兒童),name,身份類型(身份證/軍官證….),身份證,電話號碼,保存狀態
跟上面這些一一對應一下,還有一個下劃線,等你選擇兩個乘客的時候你就知道了
oldPassengerStr自己分析一下吧

再看下面的請求https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount
圖片.png
train_date時間不用解釋了,train_no好像跟車次有關哦,對於未知的參數,我們一般先看前面請求的返回值,然後纔是document和js請求,從查票請求的拆分結果來看2對應的就是這個,那麼下面的車次信息也有了,seatType座位類型

起始站編號和目的地編號我們也知道,train_location可以在查票信息中找到第15個,這裏主要看一下leftTicket參數,同樣的道理,在之前的請求中查找,我們發現initDc這個請求中搜到了這個值,key_check_isChange在下面用到(主要是看value值,這裏爲了截圖重新截的圖,所以value值不一樣,正常的情況是一樣的,不用擔心)
圖片.png

https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue
圖片.png
看一下請求參數,所有參數在之前都找到了,包括key_check_isChange

下一個請求
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1512295210042&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=56d3de8fe05b24a2daa92c0351df6cd2
圖片.png
請求參數非常明顯,random是隨機參數,其他的不用再說了
下一個請求
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=1512295213365&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=56d3de8fe05b24a2daa92c0351df6cd2
圖片.png

EXM?跟上面的是同一個請求?請求確實一樣,但是返回值不一樣,看到了嗎?orderId有值了,在下一個請求中用到了

https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue
圖片.png

好了請求發完了,打開瀏覽器看一下訂單吧,如果出現未支付訂單,恭喜你搞定了
圖片.png
圖片.png
補充一下我的執行結果,昨天訂票次數用完了,最終執行結果忘了截圖,今天重新運行一下,貼一下結果

番外:

  1. 有一些參數我在做的時候並沒有詳細去追根究底,如果你有興趣可以看一看
    https://kyfw.12306.cn/otn/resources/merged/queryLeftTicket_js.js?scriptVersion=1.9053
    圖片.png
    寫博客的時候翻到了這個js,又在裏面找到了一些參數的根源
  2. 我在寫的時候碰到一個特別神奇的問題,給我搞蒙了參數問題可以看一看,千萬不要犯我的這個錯誤
  3. 我在文章中提到的幾個js請求,後面跟了scriptVersion參數,我發現這個更新等倒是挺頻繁的,所以每次還是關注一下
  4. 我這個並沒有做的特別詳細,代碼沒有整理,沒有異常處理,還有一個需求沒有寫就是判斷哪一趟車的哪種票是不是有,能不能預訂,畢竟我並不是要寫一個非常健壯的搶票軟件,就是練一練手,做做積累
  5. 高鐵票是需要選座的,我只是訂了普通的票。等以後再看吧,有需求再補上

總結

通過整篇文章想給大家提供一個思路,主要是對於請求的參數而言:
- 首先你應該知道這個參數肯定是在當前請求之前出現的,至於是在哪個請求之後出現的這個就看情況了
- 我們的參數無外乎就兩種情況,一種是服務器發個客戶端的,一種是客戶端動態生成的。
- 當我們在前面的請求中去查找參數的時候,我的查找順序一般是先看xhr請求的返回值,因爲這個數據是最純淨的,幾乎沒有垃圾數據。然後再從document請求中查找,這個裏面一般是內嵌js數據,或者html數據,最後才從js請求中去分析數據,這是最麻煩的,也是現在很多反爬都鍾情的一種方式。

我在文中很多地方都提到了這個過程,簡單一筆帶過,最後整體的把思路說一下,大家反過來再看一下文章,就會意會很多O(∩_∩)O~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章