Andiamo dritti al punto, qui voglio principalmente parlare delle interfacce e dei formati dati delle attuali funzioni 12306. È principalmente suddiviso in cinque moduli: accesso, ottenere contatti, controllare i ticket, prenotare e interrogare ordini incompleti; per alcune altre interfacce non importanti, puoi ignorarle direttamente, come rilevare se il codice di verifica è corretto, richiedere il numero rimanente di ticket, ecc.; questo articolo è scritto e puoi studiarlo da solo se necessario. 1. Accesso Il login serve principalmente a ottenere la sessione e mantenere la comunicazione con il server. Ci sono due passaggi principali per accedere Per prima cosa, ottieni il codice di verifica del login Metodo: GET Interfaccia: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametri: ricevuto, identico Retro: Flusso di immagini binarie Secondo accesso Metodo: POST Interfaccia: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametri: 1. loginUserDTO.user_name Nome utente 2. codice di verifica randCode 3. userDTO.password password Restituisce: stringa json, che può determinare se il login è riuscito 2. Procurarsi contatti Metodo: GET Interfaccia: https://kyfw.12306.cn/otn/passengers/init Parametri: Nessuno Return: html, puoi trovare una variabile in esso, che è in formato json e può essere analizzata in un oggetto utente 3. Controllo dei biglietti Metodo: GET Interfaccia: https://kyfw.12306.cn/otn/leftTicket/query? Parametri: leftTicketDTO.train_date: Data di controllo dei biglietti leftTicketDTO.from_station: Stazione di Partenza (Codice Alfabetico) leftTicketDTO.to_station: Stazione di destinazione (codice alfabetico) purpose_codes:ADULTO Ritorno: Ritorno al formato JSON e analisi diretta 4. Prenotazione La nomina è suddivisa in 6 fasi, una per una, intercorrelate Primo: Pre-presentazione Metodo: POST Interfaccia: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parametro: secretStr: ottenuto dal controllo dei biglietti (uno per ogni treno, e diverso ogni volta, deve essere analizzato in tempo reale) train_date: Data di prenotazione back_train_date: Data di ritorno tour_flag: DC purpose_codes:ADULTO query_from_station_name: Stazione di partenza query_to_station_name: Stazione di destinazione indefinito: una stringa vuota Return: Restituisce il formato JSON per determinare se la presentazione abbia successo Secondo: Ottenere i parametri corrispondenti Metodo: POST Interfaccia: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametri: _json_att: Cordo vuoto Return: html, utile sotto la visualizzazione di globalRepeatSubmitToken nelle prime righe, e ottenendo il valore della variabile ticketInfoForPassengerForm da sotto, è in formato json, da cui purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n per prepararsi ai seguenti commit Terzo: Ottieni il codice di verifica per la presentazione Metodo: GET Interfaccia: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametri: Nessuna Ritorno: restituisce il flusso binario dell'immagine, proprio come il codice di verifica dell'accesso Quarto: Controlla se la segnalazione può essere confermata Metodo: POST Interfaccia: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametri: cancel_flag:2 bed_level_order_num:00000000000000000000000000000000000 passengerTicketStr: Tipo di sedile, 0, tipo di biglietto, nome, identità, telefono, N (se ce ne sono più di uno, separati da una virgola) oldPassengerStr: Nome, Tipo ID, Numero ID, Tipo utente randCode: Codice di verifica programmata tour_flag:dc _json_att: Cordo vuoto REPEAT_SUBMIT_TOKEN: Prendilo dal passaggio precedente Ritorno: formato json per determinare se può essere commesso Quinto: confermare la presentazione Metodo: POST Interfaccia: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametri:
passengerTicketStr: Tipo di sedile, 0, tipo di biglietto, nome, identità, telefono, N (se ce ne sono più di uno, separati da una virgola) oldPassengerStr: Nome, Tipo ID, Numero ID, Tipo utente randCode: Codice di verifica programmata purpose_codes: Passo 3 per ottenerlo key_check_isChange: Ibid leftTicketStr; Ibid train_locatio{filter}n; Ibid REPEAT_SUBMIT_TOKEN: Ibid _json_att: Cordo vuoto Return: formato json, determinare se la presentazione ha successo, restituire il tempo di attesa e chiamare il passaggio 6 ogni certo periodo per restituire il risultato dell'elaborazione Sesto: Sondaggio per ottenere i risultati delle proposte Metodo: GET Interfaccia: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametri:
casuale: Numeri casuali tourBandiera: dc REPEAT_SUBMIT_TOKEN: C'è una terza parte da ottenere _json_att: Cordo vuoto Return: json format, restituisci il tempo di attesa, se waitTime è inferiore a 0, ottieni l'informazione dell'ordine orderId, se è superiore a 0, continua il polling 5. Informarsi sugli ordini incompleti Metodo: POST Interfaccia: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametri: _json_att: Cordo vuoto Ritorni: formato JSON, contiene informazioni sull'ordine e analizza direttamente
A proposito, le 5 funzioni sono fondamentalmente introdotte, ma ora sono pubblicate solo per imparare a usarle e non saranno attaccate in modo malizioso; inoltre, l'interfaccia del sito 12306 cambia molto frequentemente, e l'interfaccia pubblicata ora potrebbe essere modificata domani, quindi la cosa importante è imparare a raccogliere interfacce e dati rilevanti e analizzarli per ottenere i parametri corrispondenti e i risultati corrispondenti. Qui uso principalmente Firebug, lo strumento di analisi di rete fornito con il browser Chrome, così come gli strumenti Fiddler e Wireshark, e le istruzioni per l'uso degli strumenti correlati, cercalo su Internet. Infine, lamentiamoci, il sito 12306 utilizza la tecnologia di cache statica CDN, che permette la selezione dei server corrispondenti in base al bilanciamento del carico in diverse regioni, larghezza di banda e carico, cioè ci sono molti server 12306 in tutto il paese. Ogni utente può accedere ai server possibili sono diversi, ma solo pagine statiche e js, css e immagini, ecc., ma ogni server manterrà direttamente la sessione condivisa, cioè, se accedi a uno dei server, su altri server Quanto sopra è anche equivalente all'atterraggio. Quindi è meglio poter scegliere un server dinamicamente in modo che i tempi di cache siano aggiornati, lo stress sia minimo e i dati siano più in tempo reale. Nella mia implementazione, se non fai query una volta, cambierai l'IP del server una volta. Per quanto riguarda la tecnologia rilevante, la rivelerò più avanti. Ma il contenuto di questo articolo è sufficiente per imparare. Puoi vedere l'indirizzo IP specifico nel http://tool.chinaz.com/dns. |