12306搶票軟件相關接口以及數據格式

  

直接步入正題吧,在這主要想說下如今的12306各個功能的接口以及數據格式。主要分爲登陸,獲取聯繫人,查票,預約,查詢未完成訂單五個模塊,至於其餘的一些接口不重要,能夠直接忽略,好比檢測驗證碼是否正確,請求車票剩餘個數等等,本文併爲寫出來,有需求的能夠自行研究。
       1、登陸
             登陸主要是獲取session,保持與服務器端通訊。登陸主要有兩個步驟
             第一 獲取登陸驗證碼
                     方法:GET
                     接口:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand&
                     參數:照抄,同樣的
                     返回:二進制圖片流
             第二 登陸
                    方法:POST
                    接口:https://kyfw.12306.cn/otn/login/loginAysnSuggest
                    參數:一、loginUserDTO.user_name 用戶名
                               二、randCode 驗證碼
                               三、userDTO.password 密碼
                     返回:json字符串,可判斷是否登陸成功
        2、獲取聯繫人
                    方法:GET
                    接口:https://kyfw.12306.cn/otn/passengers/init
                    參數:無
                    返回:html文件,裏面可以找到一個變量,是json格式的,可以解析成user對象
        3、查票
                    方法:GET
                    接口:https://kyfw.12306.cn/otn/leftTicket/query?
                    參數:leftTicketDTO.train_date:查票日期
                               leftTicketDTO.from_station:起始站(字母代號)
                               leftTicketDTO.to_station:目的站(字母代號)
                               purpose_codes:ADULT
                    返回:返回json格式,直接解析
         4、預約
                   預約分6個步驟,一一進行,相互關聯
                   第一:預提交
                            方法:POST
                            接口:https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest
                            參數:secretStr:從查票中得到(每一個車次對應一個,而且每次都不同,須要實時解析)
                                      train_date:訂票日期
                                     back_train_date:返程日期
                                      tour_flag: dc
                                      purpose_codes:ADULT
                                      query_from_station_name:出發站
                                      query_to_station_name:目的站
                                      undefined:空字符串
                           返回:返回json格式,判斷是否提交成功
                    第二:獲取相應參數
                            方法:POST
                            接口:https://kyfw.12306.cn/otn/confirmPassenger/initDc
                             參數:
                              _json_att:空字符串
                             返回:html文件,在前幾行解析globalRepeatSubmitToken 下面有用,以及從下面獲取ticketInfoForPassengerForm變量的值,是個json格式,從中獲取purpose_codes,key_check_isChange,leftTicketStr,train_locatio{過濾}n爲下面提交作準備
                    第三:獲取提交驗證碼
                              方法:GET
                             接口:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp&
                             參數:
                                      無
                             返回:和登陸驗證碼同樣,返回圖片二進制流
                     第四:檢測是否能夠確認提交
                             方法:POST
                              接口:https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo
                              參數:
                                       cancel_flag:2
                                       bed_level_order_num:000000000000000000000000000000
                                       passengerTicketStr:座位類型,0,車票類型,姓名,身份正號,電話,N(多個的話,以逗號分隔)
                                       oldPassengerStr:姓名,證件類別,證件號碼,用戶類型
                                       randCode:預約驗證碼
                                       tour_flag:dc
                                       _json_att:空字符串
                                       REPEAT_SUBMIT_TOKEN:從上一步獲取
                              返回:json格式,判斷是否能夠提交
                    第五:確認提交
                                方法:POST
                                接口:https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue
                                參數:
    
                                       passengerTicketStr:座位類型,0,車票類型,姓名,身份正號,電話,N(多個的話,以逗號分隔)
                                       oldPassengerStr:姓名,證件類別,證件號碼,用戶類型
                                       randCode:預約驗證碼
                                       purpose_codes:第3步獲取
                                       key_check_isChange:同上
                                       leftTicketStr;同上
                                       train_locatio{過濾}n;同上
                                       REPEAT_SUBMIT_TOKEN:同上
                                       _json_att:空字符串    
                               返回:json格式,判斷是否提交成功,並返回等待時間,每隔必定時間段調用第六步返回處理結果
                     第六:輪詢獲取提交結果
                               方法:GET
                               接口:https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?
                               參數:
    
                                       random:隨機數字
                                       tourFlag:dc    
                                       REPEAT_SUBMIT_TOKEN:有第三部獲取
                                       _json_att:空字符串    
                               返回:json格式,返回等待時間,若是waitTime小於0,則獲取訂單信息orderId,若是大於0,則繼續輪詢
          5、查詢未完成訂單
                 方法:POST
                 接口:https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete
                 參數:
                _json_att:空字符串    
                返回:json格式,包含訂單信息,直接解析

           說到這,5個功能基本就介紹了,但如今貼出來只是爲了學習使用,不會惡意攻擊,何況,12306網站接口更改很頻繁,如今貼出來的接口說不定明天就 被改了,因此重要的其實仍是學會怎麼抓取相關接口和數據,以及從數據中進行分析獲取相應的參數,相應的結果。在這裏我主要用了firebug,chrom瀏覽器自帶 的網絡分析工具,以及fiddler和wireshark工具,相關工具使用說明,就本身在網上找吧。
            最後在吐槽一下吧,12306網站用到了cdn靜態緩存技術,會致使在不一樣的區域,帶寬,負載下根據負載均衡選擇相應的服務器,也就是說全國各地有不少的12306服務器 每一個用戶訪問的可能服務器是不樣的,但只是靜態頁面和js、css和圖片等,但各個服務器直接會保持session共享的,也就是在其中一臺服務器登錄的話,在別的服務器 上面也至關於已經登錄了。因此最好可以動態選擇服務器,使緩存時間最新,壓力最小,數據更實時很重要。在個人實現中就是沒查詢一次,就會換一次服務器ip。至於相關 技術我之後會揭曉。但本文的內容對於學習來講已經夠了。查詢具體ip在http://tool.chinaz.com/dns  裏面可以看到。css

相關文章
相關標籤/搜索