Lad os gå direkte til sagen, her vil jeg primært tale om grænsefladerne og dataformaterne for de nuværende 12306-funktioner. Det er hovedsageligt opdelt i fem moduler: login, få kontakter, tjekke billetter, booking og forespørge ufærdige ordrer; for nogle andre grænseflader, der ikke er vigtige, kan du direkte ignorere dem, såsom at opdage, om verifikationskoden er korrekt, anmode om det resterende antal tickets osv., denne artikel er skrevet ned, og du kan selv studere den, hvis du har brug for det. 1. Log ind Login er primært for at få sessionen og opretholde kommunikationen med serveren. Der er to hovedtrin for at logge ind Først, få login-verifikationskoden Metode: GET Interface: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametre: kopi, det samme Bagside: Binær billedstrøm Anden login Metode: POST Interface: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametre: 1. loginUserDTO.user_name Brugernavn 2. randCode-verifikationskode 3. userDTO.password adgangskode Returnerer: json-streng, som kan afgøre, om login lykkes 2. Få kontakter Metode: GET Interface: https://kyfw.12306.cn/otn/passengers/init Parametre: Ingen Return: html-fil, du kan finde en variabel i den, som er i json-format og kan parses til et brugerobjekt 3. Ticketkontrol Metode: GET Interface: https://kyfw.12306.cn/otn/leftTicket/query? Parametre: leftTicketDTO.train_date: Ticketcheckdato leftTicketDTO.from_station: Startstation (alfabetisk kode) leftTicketDTO.to_station: Destinationsstation (alfabetkode) purpose_codes:VOKSEN Return: Vender tilbage til JSON-format og parser direkte 4. Reservation Udnævnelsen er opdelt i 6 trin, ét ad gangen, som er indbyrdes forbundne Først: Forudindsendelse Metode: POST Interface: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parameter: secretStr: opnået ved billetkontrol (én for hvert tog, og forskellig hver gang, skal analyseres i realtid) train_date: Bookingdato back_train_date: Returdato tour_flag: DC purpose_codes:VOKSEN query_from_station_name: Afgangsstation query_to_station_name: Destinationsstation Udefineret: en tom streng Return: Returnerer JSON-formatet for at afgøre, om indsendelsen er succesfuld For det andet: Få de tilsvarende parametre Metode: POST Interface: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametre: _json_att: Tom streng Return: html-fil, nyttig under parsing af globalRepeatSubmitToken i de første par linjer og henter værdien af ticketInfoForPassengerForm-variablen nedenunder, er i json-format, hvorfra purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n for at forberede følgende commits For det tredje: Få bekræftelseskoden for indsendelsen Metode: GET Interface: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametre: Ingen Return: Returnerer billed-binærstrømmen, ligesom login-verifikationskoden For det fjerde: Tjek om indsendelsen kan bekræftes Metode: POST Interface: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametre: cancel_flag:2 bed_level_order_num:00000000000000000000000000000000 passagerTicketStr: Sædetype, 0, billettype, navn, identitet, telefon, N (hvis der er flere, adskilt af et komma) oldPassengerStr: Navn, ID-type, ID-nummer, brugertype randCode: Planlagt verifikationskode tour_flag:dc _json_att: Tom streng REPEAT_SUBMIT_TOKEN: Hent det fra det forrige trin Return: json-format for at afgøre, om det kan committes Femte: Bekræft indsendelse Metode: POST Interface: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametre:
passagerTicketStr: Sædetype, 0, billettype, navn, identitet, telefon, N (hvis der er flere, adskilt af et komma) oldPassengerStr: Navn, ID-type, ID-nummer, brugertype randCode: Planlagt verifikationskode purpose_codes: Trin 3 for at få det key_check_isChange: Ibid leftTicketStr; Ibid train_locatio{filter}n; Ibid REPEAT_SUBMIT_TOKEN: Ibid _json_att: Tom streng Returner: json-format, afgør om indsendelsen er succesfuld, returner ventetiden, og kald trin 6 hver bestemt periode for at returnere behandlingsresultatet For det sjette: Afstemning for at få resultaterne af indsendelserne Metode: GET Interface: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametre:
tilfældige: Tilfældige tal tourFlag:dc REPEAT_SUBMIT_TOKEN: Der er en tredje del, der skal opnås _json_att: Tom streng Return: json-format, returner ventetiden, hvis ventetiden er mindre end 0, hent ordreinformationen orderId, hvis den er større end 0, fortsæt polling 5. Forespørg om ufærdige ordrer Metode: POST Interface: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametre: _json_att: Tom streng Returnerer: JSON-format, indeholder ordreinformation og parser direkte
Når vi taler om det, er de 5 funktioner grundlæggende introduceret, men nu er det kun lagt op for at lære at bruge det, og det vil ikke blive ondsindet angrebet; desuden ændrer brugerfladen på 12306-hjemmesiden sig meget ofte, og den nuværende grænseflade kan blive ændret i morgen, så det vigtige er at lære at hente relevante grænseflader og data og analysere ud fra dataene for at opnå de tilsvarende parametre og resultater. Her bruger jeg primært Firebug, netværksanalyseværktøjet der følger med Chrom-browseren, samt Fiddler- og Wireshark-værktøjerne og instruktionerne til brug af relaterede værktøjer, bare søg efter det på internettet. Lad os endelig klage, 12306-hjemmesiden bruger CDN statisk caching-teknologi, hvilket vil føre til valg af tilsvarende servere baseret på load balancing i forskellige regioner, båndbredde og belastning, det vil sige, der er mange 12306-servere over hele landet. Hver bruger kan tilgå de mulige servere, der er forskellige, men kun statiske sider og js, css og billeder osv., men hver server vil direkte dele sessionen, altså hvis du logger ind på en af serverne, på andre servere Ovenstående svarer også til at have landet. Så det er bedst at kunne vælge en server dynamisk, så cache-tiderne er opdaterede, stressen minimal, og dataene er mere realtidsorienterede. I min implementering, hvis du ikke forespørger én gang, ændrer du serverens IP én gang. Hvad angår den relevante teknologi, vil jeg afsløre den senere. Men indholdet af denne artikel er nok til at lære. Du kan se den specifikke IP-adresse i http://tool.chinaz.com/dns. |