Vamos al grano, aquí principalmente quiero hablar de las interfaces y formatos de datos de las funciones actuales de 12306. Se divide principalmente en cinco módulos: inicio de sesión, obtención de contactos, revisión de tickets, reserva y consulta de pedidos pendientes; en cuanto a otras interfaces que no son importantes, puedes ignorarlas directamente, como detectar si el código de verificación es correcto, solicitar el número restante de tickets, etc.; este artículo está escrito y puedes estudiarlo tú mismo si lo necesitas. 1. Iniciar sesión El inicio de sesión es principalmente para obtener la sesión y mantener la comunicación con el servidor. Hay dos pasos principales para iniciar sesión Primero, consigue el código de verificación de inicio de sesión Método: GET Interfaz: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parámetros: copiado, igual Reversa: Flujo de imagen binario Segundo inicio de sesión Método: POST Interfaz: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parámetros: 1. loginUserDTO.user_name Nombre de usuario 2. código de verificación randCode 3. contraseña de usuarioDTO.contraseña Devuelve: cadena json, que puede determinar si el inicio de sesión es exitoso 2. Consigue contactos Método: GET Interfaz: https://kyfw.12306.cn/otn/passengers/init Parámetros: Ninguno Return: html, puedes encontrar una variable en él, que está en formato json y puede analizarse en un objeto de usuario 3. Revisión de billetes Método: GET Interfaz: ¿https://kyfw.12306.cn/otn/leftTicket/query? Parámetros: leftTicketDTO.train_date: Fecha de revisión de tickets leftTicketDTO.from_station: Estación de Inicio (Código alfabético) leftTicketDTO.to_station: Estación de destino (código alfabético) purpose_codes:ADULTO Retorno: Vuelve al formato JSON y analiza directamente 4. Reserva El nombramiento se divide en 6 pasos, uno a uno, interrelacionados Primero: Pre-envío Método: POST Interfaz: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parámetro: secretStr: obtenido mediante la comprobación de billetes (uno para cada tren, y diferente cada vez, debe analizarse en tiempo real) train_date: Fecha de reserva back_train_date: Fecha de regreso tour_flag: dc purpose_codes:ADULTO query_from_station_name: Estación de salidas query_to_station_name: Estación de destino indefinida: una cadena vacía Devolución: Devuelve el formato JSON para determinar si la presentación es exitosa Segundo: Obtener los parámetros correspondientes Método: POST Interfaz: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parámetros: _json_att: Cuerda vacía Return: html, útil en analizar globalRepeatSubmitToken en las primeras líneas, y obtener el valor de la variable ticketInfoForPassengerForm desde abajo, está en formato json, desde donde purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n para prepararse para los siguientes commits Tercero: Obtén el código de verificación de envío Método: GET Interfaz: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parámetros: Ninguno Return: Devuelve el flujo binario de la imagen, igual que el código de verificación de inicio de sesión Cuarto: Comprueba si la publicación puede ser confirmada Método: POST Interfaz: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parámetros: cancel_flag:2 bed_level_order_num:0000000000000000000000000000000000 passengerTicketStr: tipo de asiento, 0, tipo de billete, nombre, identidad, teléfono, N (si hay más de uno, separados por una coma) oldPassengerStr: Nombre, Tipo de ID, Número de ID, Tipo de usuario randCode: Código de verificación programada tour_flag:dc _json_att: Cuerda vacía REPEAT_SUBMIT_TOKEN: Consíguelo del paso anterior Devolve: formato json para determinar si puede comprometerse Quinto: Confirmar la presentación Método: POST Interfaz: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parámetros:
passengerTicketStr: tipo de asiento, 0, tipo de billete, nombre, identidad, teléfono, N (si hay más de uno, separados por una coma) oldPassengerStr: Nombre, Tipo de ID, Número de ID, Tipo de usuario randCode: Código de verificación programada purpose_codes: Paso 3 para conseguirlo key_check_isChange: Ibid leftTicketStr; Ibid train_locatio{filter}n; Ibid REPEAT_SUBMIT_TOKEN: Ibid _json_att: Cuerda vacía Devolución: formato json, determinar si la presentación ha sido exitosa, devolver el tiempo de espera y llamar al paso 6 cada cierto periodo para devolver el resultado del procesamiento Sexto: Encuesta para obtener los resultados de las entregas Método: GET Interfaz: ¿https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parámetros:
aleatorio: Números aleatorios Bandera de la gira: dc REPEAT_SUBMIT_TOKEN: Hay una tercera parte que obtener _json_att: Cuerda vacía Return: formato json, devuelvo el tiempo de espera, si waitTime es menor que 0, obtén la información del pedido orderId, si es mayor que 0, continúa haciendo sondeo 5. Preguntar por pedidos pendientes Método: POST Interfaz: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parámetros: _json_att: Cuerda vacía Retornos: formato JSON, contiene información de orden y analiza directamente
Hablando de eso, las 5 funciones básicamente se han introducido, pero ahora se publican solo para aprender a usarlas y no serán atacadas maliciosamente; además, la interfaz del sitio web 12306 cambia muy frecuentemente, y la interfaz publicada ahora puede cambiarse mañana, así que lo importante es aprender a recopilar interfaces y datos relevantes, y analizar a partir de los datos para obtener los parámetros y resultados correspondientes. Aquí uso principalmente Firebug, la herramienta de análisis de redes que viene con el navegador Chrome, así como las herramientas Fiddler y Wireshark, y las instrucciones para usar herramientas relacionadas, solo hay que buscarlo en Internet. Por último, quejemonos, la web 12306 utiliza tecnología de caché estática CDN, lo que permite seleccionar servidores correspondientes según el balanceo de carga en diferentes regiones, ancho de banda y carga, es decir, hay muchos servidores 12306 en todo el país. Cada usuario puede acceder a los posibles servidores son diferentes, pero solo páginas estáticas y js, css y imágenes, etc., pero cada servidor mantendrá directamente la sesión compartida, es decir, si inicias sesión en uno de los servidores, en otros servidores Lo anterior también equivale a haber aterrizado. Por eso es mejor poder elegir un servidor dinámicamente para que los tiempos de caché estén actualizados, el estrés sea mínimo y los datos sean más en tiempo real. En mi implementación, si no consultas una vez, cambiarás la IP del servidor una vez. En cuanto a la tecnología relevante, la revelaré más adelante. Pero el contenido de este artículo es suficiente para aprender. Puedes ver la dirección IP específica en el http://tool.chinaz.com/dns. |