Pereikime tiesiai prie esmės, čia daugiausia noriu pakalbėti apie dabartinių 12306 funkcijų sąsajas ir duomenų formatus. Jis daugiausia skirstomas į penkis modulius: prisijungimas, kontaktų gavimas, bilietų tikrinimas, užsakymas ir nebaigtų užsakymų užklausa, kaip ir kai kurias kitas nesvarbias sąsajas, galite jų tiesiogiai ignoruoti, pavyzdžiui, nustatyti, ar patvirtinimo kodas yra teisingas, prašyti likusio bilietų skaičiaus ir pan., Šis straipsnis yra parašytas, ir, jei reikia, galite jį išstudijuoti patys. 1. Prisijunkite Prisijungimas daugiausia skirtas sesijai gauti ir palaikyti ryšį su serveriu. Norint prisijungti, reikia atlikti du pagrindinius veiksmus Pirmiausia gaukite prisijungimo patvirtinimo kodą Metodas: GET Sąsaja: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametrai: kopijuoti, tas pats Atgal: Dvejetainis paveikslėlio srautas Antrasis prisijungimas Metodas: POST Sąsaja: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametrai: 1. loginUserDTO.user_name Vartotojo vardas 2. randCode patvirtinimo kodas 3. userDTO.password slaptažodis Grąžina: json eilutė, kuri gali nustatyti, ar prisijungimas sėkmingas 2. Gaukite kontaktus Metodas: GET Sąsaja: https://kyfw.12306.cn/otn/passengers/init Parametrai: Nėra Grąžinti: html failą, jame galite rasti kintamąjį, kuris yra json formatu ir gali būti išanalizuotas į vartotojo objektą 3. Bilietų tikrinimas Metodas: GET Sąsaja: https://kyfw.12306.cn/otn/leftTicket/query? Parametrai: leftTicketDTO.train_date: Bilietų patikros data leftTicketDTO.from_station: Pradinė stotis (abėcėlės kodas) leftTicketDTO.to_station: Paskirties stotis (abėcėlės kodas) purpose_codes:SUAUGĘS Return: grįžta į JSON formatą ir tiesiogiai analizuojama 4. Rezervacija Paskyrimas yra padalintas į 6 etapus, po vieną, tarpusavyje susijusius Pirmas: išankstinis pateikimas Metodas: POST Sąsaja: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parametras: secretStr: gaunamas tikrinant bilietus (po vieną kiekvienam traukiniui ir kiekvieną kartą skirtingas, reikia išanalizuoti realiu laiku) train_date: Užsakymo data back_train_date: Grįžimo data tour_flag: DC purpose_codes:SUAUGĘS query_from_station_name: Išvykimo stotis query_to_station_name: Paskirties stotis neapibrėžta: tuščia eilutė Grąžinti: pateikia JSON formatą, kad nustatytų, ar pateikimas sėkmingas Antra: gaukite atitinkamus parametrus Metodas: POST Sąsaja: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametrai: _json_att: tuščia eilutė Return: html failas, naudingas analizuojant globalRepeatSubmitToken pirmose keliose eilutėse ir gaunant ticketInfoForPassengerForm kintamojo vertę iš apačios, yra json formatu, iš kurio purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n pasirengti šiems įsipareigojimams Trečia: gaukite pateikimo patvirtinimo kodą Metodas: GET Sąsaja: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametrai: Nėra Return: pateikia vaizdo dvejetainį srautą, kaip ir prisijungimo patvirtinimo kodą Ketvirta: patikrinkite, ar paraišką galima patvirtinti Metodas: POST Sąsaja: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametrai: cancel_flag:2 bed_level_order_num:000000000000000000000000000000000000 passengerTicketStr: Sėdynės tipas, 0, bilieto tipas, vardas, tapatybė, telefonas, N (jei yra daugiau nei vienas, atskirtas kableliu) oldPassengerStr: vardas, ID tipas, ID numeris, vartotojo tipas randCode: suplanuotas patvirtinimo kodas tour_flag:DC _json_att: tuščia eilutė REPEAT_SUBMIT_TOKEN: Gaukite jį iš ankstesnio veiksmo Grąžinimas: json formatas, skirtas nustatyti, ar jį galima atlikti Penkta: patvirtinkite pateikimą Metodas: POST Sąsaja: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametrai:
passengerTicketStr: Sėdynės tipas, 0, bilieto tipas, vardas, tapatybė, telefonas, N (jei yra daugiau nei vienas, atskirtas kableliu) oldPassengerStr: vardas, ID tipas, ID numeris, vartotojo tipas randCode: suplanuotas patvirtinimo kodas purpose_codes: 3 veiksmas, kad jį gautumėte key_check_isChange: Ten pat leftTicketStr; Ten pat train_locatio{filter}n; Ten pat REPEAT_SUBMIT_TOKEN: Ten pat _json_att: tuščia eilutė Grąžinti: JSON formatu, nustatyti, ar pateikimas sėkmingas, grąžinti laukimo laiką ir skambinti 6 veiksmą kas tam tikrą laikotarpį, kad grąžintumėte apdorojimo rezultatą Šešta: apklausa, kad gautumėte pateikimo rezultatus Metodas: GET Sąsaja: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametrai:
atsitiktinis: atsitiktiniai skaičiai tourVėliava:dc REPEAT_SUBMIT_TOKEN: Reikia gauti trečią dalį _json_att: tuščia eilutė Grąžinti: json formatas, grąžinti laukimo laiką, jei waitTime yra mažesnis nei 0, gauti užsakymo informaciją orderId, jei jis didesnis nei 0, tęsti apklausą 5. Teiraukitės apie nebaigtus užsakymus Metodas: POST Sąsaja: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametrai: _json_att: tuščia eilutė Grąžinimai: JSON formatas, yra užsakymo informacija ir analizuojama tiesiogiai
Kalbant apie tai, 5 funkcijos iš esmės yra pristatytos, tačiau dabar ji skelbiama tik tam, kad išmoktų naudotis ir nebus piktybiškai puolama, be to, 12306 svetainės sąsaja keičiasi labai dažnai, o dabar paskelbta sąsaja gali būti pakeista rytoj, todėl svarbu išmokti paimti atitinkamas sąsajas ir duomenis bei analizuoti iš duomenų, kad gautumėte atitinkamus parametrus ir atitinkamus rezultatus. Čia daugiausia naudoju "firebug", tinklo analizės įrankį, kuris pateikiamas kartu su chromo naršykle, taip pat "Fiddler" ir "Wireshark" įrankius bei susijusių įrankių naudojimo instrukcijas, tiesiog ieškokite jo internete. Galiausiai, skųskimės, 12306 svetainėje naudojama CDN statinės talpyklos technologija, kuri leis pasirinkti atitinkamus serverius pagal apkrovos balansavimą skirtinguose regionuose, pralaidumą ir apkrovą, tai yra, visoje šalyje yra daug 12306 serverių Kiekvienas vartotojas gali pasiekti galimus serverius yra skirtingi, tačiau tik statiniai puslapiai ir js, css ir paveikslėliai ir kt., tačiau kiekvienas serveris tiesiogiai išlaikys sesiją bendrinama, tai yra, jei prisijungsite prie vieno iš serverių, kituose serveriuose Tai, kas išdėstyta aukščiau, taip pat prilygsta nusileidimui. Taigi geriausia turėti galimybę pasirinkti serverį dinamiškai, kad talpyklos laikas būtų atnaujintas, stresas būtų minimalus, o duomenys būtų daugiau realiuoju laiku. Mano įgyvendinime, jei nepateiksite užklausos vieną kartą, vieną kartą pakeisite serverio IP. Kalbant apie atitinkamą technologiją, ją atskleisiu vėliau. Tačiau šio straipsnio turinio pakanka mokymuisi. Konkretų IP adresą galite pamatyti http://tool.chinaz.com/dns. |