Kommen wir direkt zur Sache: Hier möchte ich hauptsächlich über die Schnittstellen und Datenformate der aktuellen 12306-Funktionen sprechen. Es ist hauptsächlich in fünf Module unterteilt: Login, Kontaktaufnahme, Ticketchecken, Buchung und Abfrage unfertiger Bestellungen. Bei einigen anderen Schnittstellen, die nicht wichtig sind, kann man sie direkt ignorieren, wie zum Beispiel die Erkennung des Verifizierungscodes, das Anfordern der verbleibenden Anzahl der Tickets usw.; dieser Artikel ist ausgeschrieben, und man kann ihn selbst studieren, falls nötig. 1. Einloggen Login dient hauptsächlich dazu, die Sitzung zu empfangen und die Kommunikation mit dem Server aufrechtzuerhalten. Es gibt zwei Hauptschritte, um sich einzuloggen. Erstens, holen Sie sich den Login-Verifizierungscode Methode: GET Benutzeroberfläche: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parameter: kopiert, gleich Rückseite: Binärbildstrom Zweiter Login Methode: POST Benutzeroberfläche: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parameter: 1. loginUserDTO.user_name Benutzername 2. randCode-Verifizierungscode 3. userDTO.password-Passwort Gibt den json-String zurück, der bestimmen kann, ob der Login erfolgreich ist 2. Kontakte knüpfen Methode: GET Benutzeroberfläche: https://kyfw.12306.cn/otn/passengers/init Parameter: Keine Return: html-Datei, du kannst darin eine Variable finden, die im JSON-Format ist und in ein Benutzerobjekt geparst werden kann 3. Ticketkontrolle Methode: GET Benutzeroberfläche: https://kyfw.12306.cn/otn/leftTicket/query? Parameter: leftTicketDTO.train_date: Ticketprüfungsdatum leftTicketDTO.from_station: Startstation (alphabetischer Code) leftTicketDTO.to_station: Zielstation (Alphabet-Code) purpose_codes:ERWACHSENER Rückkehr: Kehrt zum JSON-Format zurück und parst direkt 4. Reservierung Die Ernennung ist in sechs Schritte unterteilt, nacheinander, die miteinander verknüpft sind Erstens: Vorababgabe Methode: POST Benutzeroberfläche: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parameter: secretStr: Erhalten durch die Ticketkontrolle (jeweils eine für jeden Zug, jedes Mal unterschiedlich, muss in Echtzeit analysiert werden) train_date: Buchungstermin back_train_date: Rückgabedatum tour_flag: DC purpose_codes:ERWACHSENER query_from_station_name: Abflugstation query_to_station_name: Zielbahnhof undefiniert: eine leere Zeichenkette Rückgabe: Gibt das JSON-Format zurück, um zu bestimmen, ob die Einreichung erfolgreich ist Zweitens: Erhalten Sie die entsprechenden Parameter Methode: POST Benutzeroberfläche: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parameter: _json_att: Leere Schnur Return: html-Datei, nützlich unter dem Parsen von globalRepeatSubmitToken in den ersten Zeilen und dem Erhalten des Werts der ticketInfoForPassengerForm-Variable von unten, ist im JSON-Format, von dem purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n zur Vorbereitung auf die folgenden Commits Drittens: Holen Sie sich den Verifizierungscode für die Einreichung Methode: GET Benutzeroberfläche: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parameter: Nichts Rückgabe: Gibt den Bild-Binärstrom zurück, genau wie der Login-Verifizierungscode Viertens: Überprüfe, ob die Einreichung bestätigt werden kann Methode: POST Benutzeroberfläche: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parameter: cancel_flag:2 bed_level_order_num:000000000000000000000000000000000 passageTicketStr: Sitztyp, 0, Tickettyp, Name, Identität, Telefon, N (wenn es mehr als einen gibt, getrennt durch ein Komma) oldPassengerStr: Name, ID-Typ, ID-Nummer, Benutzertyp randCode: Geplanter Verifizierungscode tour_flag:DC _json_att: Leere Schnur REPEAT_SUBMIT_TOKEN: Hol es aus dem vorherigen Schritt Rückgabe: JSON-Format, um zu bestimmen, ob es eingebracht werden kann Fünftens: Einreichung bestätigen Methode: POST Benutzeroberfläche: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parameter:
passageTicketStr: Sitztyp, 0, Tickettyp, Name, Identität, Telefon, N (wenn es mehr als einen gibt, getrennt durch ein Komma) oldPassengerStr: Name, ID-Typ, ID-Nummer, Benutzertyp randCode: Geplanter Verifizierungscode purpose_codes: Schritt 3, um es zu bekommen key_check_isChange: Ebd. leftTicketStr; Ebd. train_locatio{filter}n; Ebd. REPEAT_SUBMIT_TOKEN: Ebd. _json_att: Leere Schnur Rückgabe: json-Format, bestimmen, ob die Einreichung erfolgreich ist, die Wartezeit zurückgeben und Schritt 6 in jeder bestimmten Zeit aufrufen, um das Verarbeitungsergebnis zurückzugeben Sechstens: Umfrage zur Erteilung der Einreichungsergebnisse Methode: GET Benutzeroberfläche: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parameter:
zufällig: Zufallszahlen tourFlag:dc REPEAT_SUBMIT_TOKEN: Es gibt noch einen dritten Teil zu erlangen _json_att: Leere Schnur Zurückgeben: json-Format, die Wartezeit zurückgeben, wenn die Wartezeit kleiner als 0 ist, die Orderinformation orderId erhalten, wenn sie größer als 0 ist, weiter abfragen 5. Erkundige dich nach unvollendeten Bestellungen Methode: POST Benutzeroberfläche: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parameter: _json_att: Leere Schnur Gibt zurück: JSON-Format, enthält Bestellinformationen und parst direkt
Apropos, die 5 Funktionen wurden im Grunde eingeführt, aber jetzt sind sie nur zum Lernen der Nutzung verfügbar und werden nicht böswillig angegriffen; außerdem ändert sich die Benutzeroberfläche der 12306-Website sehr häufig, und die jetzt veröffentlichte Oberfläche könnte morgen geändert werden, daher ist es wichtig, zu lernen, wie man relevante Schnittstellen und Daten abnimmt und aus den Daten analysiert, um die entsprechenden Parameter und Ergebnisse zu erhalten. Hier nutze ich hauptsächlich firebug, das Netzwerkanalyse-Tool mit dem Chrom-Browser, sowie die Fiddler- und Wireshark-Tools und die Anleitungen zur Nutzung verwandter Tools – such einfach im Internet danach. Abschließend, beschweren wir uns: Die 12306-Website verwendet CDN-Static-Caching-Technologie, was dazu führt, dass die entsprechenden Server entsprechend der Lastverteilung in verschiedenen Regionen, Bandbreite und Last ausgewählt werden, das heißt, es gibt viele 12306-Server im ganzen Land. Jeder Nutzer kann auf die möglichen Server zugreifen, aber nur statische Seiten und JS, CSS und Bilder usw., aber jeder Server hält die Sitzung direkt geteilt, das heißt, wenn man sich auf einem Server auf anderen Servern anmeldet. Das oben Genannte entspricht ebenfalls einer Landung. Deshalb ist es am besten, einen Server dynamisch auswählen zu können, damit die Cache-Zeiten aktuell sind, der Stress minimal ist und die Daten in Echtzeit sind. In meiner Implementierung ändert man die Server-IP einmal, wenn man nicht einmal abfragt. Was die relevante Technologie angeht, werde ich sie später verraten. Aber der Inhalt dieses Artikels reicht zum Lernen aus. Man kann die genaue IP-Adresse im http://tool.chinaz.com/dns sehen. |