Pojdimo naravnost k bistvu, tukaj želim predvsem govoriti o vmesnikih in podatkovnih formatih trenutnih funkcij 12306. Večinoma je razdeljen na pet modulov: prijava, pridobivanje stikov, preverjanje vstopnic, rezervacija in poizvedba po nedokončanih naročilih; kar se tiče nekaterih drugih vmesnikov, ki niso pomembni, jih lahko neposredno ignorirate, kot je zaznavanje pravilnosti verifikacijske kode, zahteva za preostalo število vstopnic itd., ta članek je napisan in ga lahko preučite sami, če ga potrebujete. 1. Prijava Prijava je predvsem za prenos seje in vzdrževanje komunikacije s strežnikom. Obstajata dva glavna koraka za prijavo Najprej pridobite kodo za preverjanje prijave Metoda: GET Vmesnik: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametri: kopirano, enako Nazaj: Binarni slikovni tok Druga prijava Metoda: POST Vmesnik: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametri: 1. loginUserDTO.user_name uporabniško ime 2. Preverjanje kode randCode 3. userDTO.geslo Vrne: nizek json, ki lahko določi, ali je prijava uspešna 2. Pridobite kontakte Metoda: GET Vmesnik: https://kyfw.12306.cn/otn/passengers/init Parametri: Brez Return: html datoteka, v njej lahko najdete spremenljivko, ki je v json formatu in jo je mogoče razčleniti v uporabniški objekt 3. Preverjanje vozovnic Metoda: GET Vmesnik: https://kyfw.12306.cn/otn/leftTicket/query? Parametri: leftTicketDTO.train_date: Datum preverjanja vstopnice leftTicketDTO.from_station: Začetna postaja (abecedna koda) leftTicketDTO.to_station: Ciljna postaja (abeceda) purpose_codes: ODRASLI Vrnitev: Vrne se v JSON format in neposredno razčlenjuje 4. Rezervacija Termin je razdeljen na 6 korakov, ki so med seboj povezani Prva: Predoddaja Metoda: POST Vmesnik: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parameter: secretStr: pridobljeno s preverjanjem vozovnic (ena za vsak vlak, vsakič drugačna, mora biti razčlenjena v realnem času) train_date: Datum rezervacije back_train_date: Datum vrnitve tour_flag: DC purpose_codes: ODRASLI query_from_station_name: Odhodna postaja query_to_station_name: Ciljna postaja Nedefinirano: prazen niz Return: Vrne JSON format, da ugotovi, ali je oddaja uspešna Drugič: Pridobite ustrezne parametre Metoda: POST Vmesnik: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametri: _json_att: Prazen niz Return: html datoteka, uporabna pri razčlenjevanju globalRepeatSubmitToken v prvih vrsticah in pridobivanju vrednosti spremenljivke ticketInfoForPassengerForm spodaj, je v json formatu, iz katerega purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n za pripravo na naslednje commit-e Tretjič: pridobite kodo za preverjanje prispevka Metoda: GET Vmesnik: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametri: Nobenega Return: Vrne binarni tok slike, tako kot koda za preverjanje prijave Četrtič: Preverite, ali je mogoče potrditi oddajo Metoda: POST Vmesnik: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametri: cancel_flag:2 bed_level_order_num:00000000000000000000000000000 passengerTicketStr: Vrsta sedeža, 0, vrsta vozovnice, ime, identiteta, telefon, N (če jih je več, ločeno s vejico) oldPassengerStr: Ime, vrsta osebne izkaznice, ID številka, uporabniška vrsta randCode: Načrtovana verifikacijska koda tour_flag:dc _json_att: Prazen niz REPEAT_SUBMIT_TOKEN: Vzemi ga iz prejšnjega koraka Return: json format, da ugotovimo, ali se lahko potrdi Petič: Potrdite oddajo Metoda: POST Vmesnik: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametri:
passengerTicketStr: Vrsta sedeža, 0, vrsta vozovnice, ime, identiteta, telefon, N (če jih je več, ločeno s vejico) oldPassengerStr: Ime, vrsta osebne izkaznice, ID številka, uporabniška vrsta randCode: Načrtovana verifikacijska koda purpose_codes: Korak 3, da ga dobiš key_check_isChange: Prav tako leftTicketStr; Prav tako train_locatio{filter}n; Prav tako REPEAT_SUBMIT_TOKEN: Prav tako _json_att: Prazen niz Vrni: json format, ugotovi, ali je oddaja uspešna, vrni čakalni čas in pokliči korak 6 vsako določeno obdobje, da vrneš rezultat obdelave Šesto: Anketa za rezultate oddaje Metoda: GET Vmesnik: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametri:
naključno: Naključna števila tourFlag:dc REPEAT_SUBMIT_TOKEN: Obstaja tretji del, ki ga je treba pridobiti _json_att: Prazen niz Vrni: json format, vrni čakalni čas, če je waitTime manjši od 0, dobi informacijo o naročilu orderId, če je večji od 0, nadaljuj z anketiranjem 5. Pozanimajte se o nedokončanih naročilih Metoda: POST Vmesnik: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametri: _json_att: Prazen niz Vračila: JSON format, vsebuje informacije o vrstnem redu in neposredno razčlenjuje
Kar se tiče tega, je v bistvu uvedenih 5 funkcij, vendar je zdaj objavljena le zato, da se naučite uporabljati in ne bo zlonamerno napadena, poleg tega se vmesnik spletne strani 12306 zelo pogosto spreminja, trenutno objavljeni vmesnik pa se lahko spremeni že jutri, zato je pomembno, da se naučite pridobivati ustrezne vmesnike in podatke ter analizirati podatke, da dobite ustrezne parametre in ustrezne rezultate. Tukaj večinoma uporabljam firebug, orodje za analizo omrežij, ki je priloženo brskalniku Chrome, pa tudi orodja Fiddler in Wireshark ter navodila za uporabo sorodnih orodij, samo poiščite jih na internetu. Nazadnje, pritožimo se, spletna stran 12306 uporablja CDN tehnologijo statičnega predpomnjenja, kar vodi do izbire ustreznih strežnikov glede na uravnoteženje obremenitve v različnih regijah, pasovno širino in obremenitev, torej obstaja veliko strežnikov 12306 po vsej državi. Vsak uporabnik lahko dostopa do različnih strežnikov, vendar so to le statične strani in js, css, slike itd., vendar bo vsak strežnik neposredno ohranjal sejo deljeno, torej, če se prijavite na enega od strežnikov, na drugih strežnikih Zgornje je tudi enakovredno pristanku. Zato je najbolje, da lahko strežnik izberete dinamično, da so časi predpomnilnika ažurni, stres minimalen in podatki bolj v realnem času. V moji izvedbi, če ne poizvedujete enkrat, boste enkrat spremenili IP strežnika. Kar zadeva ustrezno tehnologijo, jo bom razkril kasneje. A vsebina tega članka je dovolj za učenje. Specifični IP naslov lahko vidite v http://tool.chinaz.com/dns. |