Poďme rovno k veci, tu chcem hlavne hovoriť o rozhraniach a dátových formátoch súčasných funkcií 12306. Je rozdelený hlavne do piatich modulov: prihlásenie, získavanie kontaktov, kontrola tiketov, rezervácia a odosielanie dotazov na nedokončené objednávky, čo sa týka niektorých iných rozhraní, ktoré nie sú dôležité, môžete priamo ignorovať, napríklad zistiť, či je overovací kód správny, požiadať o zostávajúci počet tiketov a podobne. Tento článok je napísaný a môžete si ho sami preštudovať, ak ho potrebujete. 1. Prihlásiť sa Prihlásenie slúži hlavne na získanie relácie a udržiavanie komunikácie so serverom. Existujú dva hlavné kroky prihlásenia Najprv získajte overovací kód na prihlásenie Metóda: ZÍSKAŤ Rozhranie: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametre: rozumiem, to isté Späť: Binárny obrazový tok Druhé prihlásenie Metóda: POST Rozhranie: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametre: 1. loginUserDTO.user_name Používateľské meno 2. overovací kód randCode 3. heslo používateľaDTO.password Vracia: reťazec json, ktorý môže určiť, či je prihlásenie úspešné 2. Získaj kontakty Metóda: ZÍSKAŤ Rozhranie: https://kyfw.12306.cn/otn/passengers/init Parametre: Žiadne Return: html súbor, môžete v ňom nájsť premennú, ktorá je vo formáte json a dá sa parsovať do používateľského objektu 3. Kontrola lístkov Metóda: ZÍSKAŤ Rozhranie: https://kyfw.12306.cn/otn/leftTicket/query? Parametre: leftTicketDTO.train_date: Dátum kontroly lístka leftTicketDTO.from_station: Štartovacia stanica (abecedný kód) leftTicketDTO.to_station: Cieľová stanica (abecedný kód) purpose_codes: DOSPELÍ Návrat: Vráti sa do formátu JSON a analyzuje priamo 4. Rezervácia Vymenovanie je rozdelené do 6 krokov, jeden po druhom, navzájom prepojených Po prvé: Predodoslanie Metóda: POST Rozhranie: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parameter: secretStr: získané kontrolou lístkov (jeden pre každý vlak, zakaždým iný, musí sa analyzovať v reálnom čase) train_date: Dátum rezervácie back_train_date: Dátum návratu tour_flag: DC purpose_codes: DOSPELÍ query_from_station_name: Odletová stanica query_to_station_name: Cieľová stanica nedefinované: prázdny reťazec Return: Vráti formát JSON, aby zistil, či je odoslanie úspešné Po druhé: Získajte zodpovedajúce parametre Metóda: POST Rozhranie: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametre: _json_att: Prázdny reťazec Return: html súbor, užitočný pri parsovaní globalRepeatSubmitToken v prvých riadkoch a získaní hodnoty premennej ticketInfoForPassengerForm z nižšie, je vo formáte json, z ktorého purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n na prípravu nasledujúcich commitov Po tretie: Získajte overovací kód na odoslanie Metóda: ZÍSKAŤ Rozhranie: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametre: Žiadna Return: Vráti binárny tok obrazu, rovnako ako overovací kód na prihlásenie Po štvrté: Skontrolujte, či je možné potvrdenie príspevku Metóda: POST Rozhranie: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametre: cancel_flag:2 bed_level_order_num:00000000000000000000000000000000 passengerTicketStr: Typ sedadla, 0, typ lístka, meno, identita, telefón, N (ak ich je viac, oddelené čiarkou) oldPassengerStr: Meno, typ ID, ID číslo, typ používateľa randCode: Plánovaný overovací kód tour_flag:dc _json_att: Prázdny reťazec REPEAT_SUBMIT_TOKEN: Získaj to z predchádzajúceho kroku Return: json formát na určenie, či je možné to commitovať Po piate: Potvrďte odoslanie Metóda: POST Rozhranie: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametre:
passengerTicketStr: Typ sedadla, 0, typ lístka, meno, identita, telefón, N (ak ich je viac, oddelené čiarkou) oldPassengerStr: Meno, typ ID, ID číslo, typ používateľa randCode: Plánovaný overovací kód purpose_codes: Krok 3, aby ste to získali key_check_isChange: Ibid leftTicketStr; Ibid train_locatio{filter}n; Ibid REPEAT_SUBMIT_TOKEN: Ibid _json_att: Prázdny reťazec Vráťte: json formát, zistite, či je odoslanie úspešné, vráťte čakaciu dobu a zavolajte krok 6 každé určité obdobie, aby ste vrátili výsledok spracovania Šieste: Prieskum na výsledky odoslaných príspevkov Metóda: ZÍSKAŤ Rozhranie: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametre:
náhodné: Náhodné čísla tourFlag:dc REPEAT_SUBMIT_TOKEN: Je tu tretia časť, ktorú treba získať _json_att: Prázdny reťazec Vráť: json formát, vráťte čas čakania, ak je čas čakania menší ako 0, získajte informácie o objednávke orderId, ak je väčší ako 0, pokračujte v dotazovaní 5. Pýtajte sa na nedokončené objednávky Metóda: POST Rozhranie: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametre: _json_att: Prázdny reťazec Returns: JSON formát, obsahuje informácie o poradí a priamo analyzuje
Keď už o tom hovoríme, 5 funkcií je v podstate predstavených, ale teraz sú zverejnené len na učenie sa ich používať a nebudú škodlivo napadnuté, navyše rozhranie webu 12306 sa veľmi často mení a rozhranie, ktoré je teraz zverejnené, môže byť zajtra zmenené, takže dôležité je naučiť sa získavať relevantné rozhrania a dáta a analyzovať z nich, aby ste získali príslušné parametre a zodpovedajúce výsledky. Tu používam hlavne firebug, nástroj na analýzu sietí, ktorý je súčasťou prehliadača Chrome, ako aj nástroje Fiddler a Wireshark, a návody na používanie súvisiacich nástrojov, stačí ich hľadať na internete. Nakoniec, sťažujme sa, webová stránka 12306 používa technológiu statického cachovania CDN, čo vedie k výberu zodpovedajúcich serverov podľa load balancing v rôznych regiónoch, šírky pásma a záťaže, teda existuje mnoho 12306 serverov po celej krajine. Každý používateľ môže pristupovať k možným serverom, ktoré sú odlišné, ale len statické stránky, js, css, obrázky atď., ale každý server priamo udržiava reláciu zdieľanú, teda ak sa prihlásite na jeden zo serverov, na iných serveroch Vyššie uvedené je tiež ekvivalentné pristátiu. Preto je najlepšie vedieť dynamicky vybrať server, aby boli časy cache aktuálne, stres minimálny a dáta viac v reálnom čase. V mojej implementácii, ak nedotazujete raz, zmeníte IP servera raz. Čo sa týka relevantnej technológie, prezradím ju neskôr. Ale obsah tohto článku je dostatočný na učenie. Konkrétnu IP adresu môžete vidieť v http://tool.chinaz.com/dns. |