Pojďme rovnou k věci, zde se chci hlavně zaměřit na rozhraní a datové formáty současných funkcí 12306. Je hlavně rozdělen do pěti modulů: přihlášení, získávání kontaktů, kontrola tiketů, rezervace a dotazování nedokončených objednávek, u některých jiných rozhraní, která nejsou důležitá, můžete přímo ignorovat, například zjistit, zda je ověřovací kód správný, požádat o zbývající počet tiketů atd. Tento článek je napsán a můžete si ho sami prostudovat, pokud ho budete potřebovat. 1. Přihlásit se Přihlášení slouží hlavně k získání relace a udržení komunikace se serverem. Existují dva hlavní kroky přihlášení Nejprve si získej ověřovací kód Metoda: GET Rozhraní: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametry: kopíruji, stejné Zpět: Binární obrazový proud Druhé přihlášení Metoda: POST Rozhraní: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametry: 1. loginUserDTO.user_name Uživatelské jméno 2. Ověřovací kód randCode 3. userDTO.password heslo Vrací: json string, který může určit, zda je přihlášení úspěšné 2. Získejte kontakty Metoda: GET Rozhraní: https://kyfw.12306.cn/otn/passengers/init Parametry: Žádné Return: html soubor, v němž najdete proměnnou, která je ve formátu json a lze ji parsovat do uživatelského objektu 3. Kontrola vstupenek Metoda: GET Rozhraní: https://kyfw.12306.cn/otn/leftTicket/query? Parametry: leftTicketDTO.train_date: Datum kontroly vstupenky leftTicketDTO.from_station: Výchozí stanice (abecední kód) leftTicketDTO.to_station: Cílová stanice (abecední kód) purpose_codes: DOSPĚLÍ Návrat: Vrací se do formátu JSON a přímo parsuje 4. Rezervace Jmenování je rozděleno do 6 kroků, jeden po druhém, vzájemně propojených Za prvé: Předběžné podání Metoda: POST Uživatelské rozhraní: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parametr: secretStr: získáno z kontroly jízdenek (jeden pro každý vlak, pokaždé jiný, je třeba analyzovat v reálném čase) train_date: Datum rezervace back_train_date: Datum návratu tour_flag: DC purpose_codes: DOSPĚLÍ query_from_station_name: Odjezdová stanice query_to_station_name: Cílová stanice nedefinované: prázdný řetězec Return: Vrátí formát JSON, aby zjistil, zda je odeslání úspěšné Za druhé: Získejte odpovídající parametry Metoda: POST Uživatelské rozhraní: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametry: _json_att: Prázdný řetězec Return: html soubor, užitečný při parsování globalRepeatSubmitToken v prvních řádcích a získání hodnoty proměnné ticketInfoForPassengerForm zespodu, je ve formátu json, ze kterého purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n pro přípravu na následující commity Za třetí: Získejte kód pro ověření odeslání Metoda: GET Rozhraní: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametry: Žádné Return: Vrátí binární tok obrazu, stejně jako ověřovací kód přihlášení Za čtvrté: Zkontrolujte, zda lze příspěvek potvrdit Metoda: POST Rozhraní: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametry: cancel_flag:2 bed_level_order_num:000000000000000000000000000000 passengerTicketStr: Typ sedadla, 0, typ jízdenky, jméno, identita, telefon, N (pokud jich je více, odděleno čárkou) oldPassengerStr: Jméno, typ ID, ID číslo, uživatelský typ randCode: Plánovaný ověřovací kód tour_flag:dc _json_att: Prázdný řetězec REPEAT_SUBMIT_TOKEN: Vezměte to z předchozího kroku Return: json formát pro určení, zda lze commitovat Páté: Potvrdit podání Metoda: POST Rozhraní: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametry:
passengerTicketStr: Typ sedadla, 0, typ jízdenky, jméno, identita, telefon, N (pokud jich je více, odděleno čárkou) oldPassengerStr: Jméno, typ ID, ID číslo, uživatelský typ randCode: Plánovaný ověřovací kód purpose_codes: Krok 3, jak to pochopit key_check_isChange: Totéž leftTicketStr; Totéž train_locatio{filter}n; Totéž REPEAT_SUBMIT_TOKEN: Totéž _json_att: Prázdný řetězec Vrať: json formát, určit, zda je odeslání úspěšné, vraťte čekací dobu a zavolejte krok 6 každé určité období, abyste vrátili výsledek zpracování Šesté: Hlasujte o výsledky zasílání Metoda: GET Rozhraní: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametry:
náhodné: náhodná čísla tourFlag:dc REPEAT_SUBMIT_TOKEN: Je tu třetí část, kterou je třeba získat _json_att: Prázdný řetězec Return: json format, vraťte čekací dobu, pokud je waitTime menší než 0, získejte order information orderId, pokud je větší než 0, pokračujte v dotazování 5. Dotazujte se na nedokončené objednávky Metoda: POST Rozhraní: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametry: _json_att: Prázdný řetězec Returns: JSON formát, obsahuje informace o pořadí a přímo analyzuje
Když už mluvíme o tom, 5 funkcí je v podstatě zavedeno, ale nyní je zveřejněno jen proto, aby se naučilo používat a nebude zlomyslně napadáno, navíc rozhraní webu 12306 se velmi často mění a nyní zveřejněné rozhraní může být zítra změněno, takže důležité je naučit se získávat relevantní rozhraní a data a analyzovat z dat, abyste získali odpovídající parametry a výsledky. Tady hlavně používám firebug, nástroj pro analýzu sítí, který je součástí prohlížeče Chrome, stejně jako nástroje Fiddler a Wireshark, a instrukce k používání souvisejících nástrojů, stačí je hledat na internetu. Nakonec si stěžujme, web 12306 používá technologii statického cachování CDN, což vede k výběru odpovídajících serverů podle load balancing v různých regionech, šířky pásma a zátěže, tedy že existuje mnoho serverů 12306 po celé zemi. Každý uživatel může přistupovat k různým serverům, ale pouze statické stránky a js, css a obrázky atd., ale každý server bude relaci přímo sdílet – pokud se přihlásíte na jeden ze serverů, na jiných serverech Výše uvedené je také ekvivalentní přistání. Je tedy nejlepší mít možnost dynamicky vybírat server, aby byly časy cache aktuální, stres minimální a data více v reálném čase. V mé implementaci, pokud nedotazujete jednou, změníte IP serveru jednou. Co se týče příslušné technologie, odhalím ji později. Ale obsah tohoto článku je dostatečný k učení. Konkrétní IP adresu můžete vidět v http://tool.chinaz.com/dns. |