Vamos direto ao ponto, aqui quero falar principalmente sobre as interfaces e formatos de dados das funções atuais do 12306. Ele é dividido principalmente em cinco módulos: login, obtenção de contatos, checagem de tickets, reserva e consulta de pedidos inacabados, pois para algumas outras interfaces que não são importantes, você pode ignorá-las diretamente, como detectar se o código de verificação está correto, solicitar o número restante de tickets, etc.; este artigo está escrito, e você pode estudá-lo por conta própria se precisar. 1. Logar O login é principalmente para obter a sessão e manter a comunicação com o servidor. Existem dois passos principais para fazer login Primeiro, obtenha o código de verificação de login Método: GET Interface: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parâmetros: copiado, o mesmo Verso: Fluxo de imagem binária Segundo login Método: POST Interface: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parâmetros: 1. loginUserDTO.user_name Nome do usuário 2. código de verificação randCode 3. senha do usuárioDTO.senha Retorna: json string, que pode determinar se o login é bem-sucedido 2. Conseguir contatos Método: GET Interface: https://kyfw.12306.cn/otn/passengers/init Parâmetros: Nenhum Retorno: arquivo html, você pode encontrar uma variável nele, que está em formato json e pode ser processada em um objeto de usuário 3. Verificação de bilhetes Método: GET Interface: https://kyfw.12306.cn/otn/leftTicket/query? Parâmetros: leftTicketDTO.train_date: Data da verificação de ingressos leftTicketDTO.from_station: Estação de Partida (Código Albético) leftTicketDTO.to_station: Estação de destino (código alfabético) purpose_codes:ADULTO Retorno: Retorna ao formato JSON e analisa diretamente 4. Reserva A nomeação é dividida em 6 etapas, uma a uma, inter-relacionadas Primeiro: Pré-submissão Método: POST Interface: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parâmetro: secretStr: obtido na verificação de bilhetes (um para cada trem, diferente a cada vez, precisa ser analisado em tempo real) train_date: Data de reserva back_train_date: Data de retorno tour_flag: DC purpose_codes:ADULTO query_from_station_name: Estação de partida query_to_station_name: Estação de destino indefinida: uma cadeia vazia Retorno: Retorna o formato JSON para determinar se a submissão é bem-sucedida Segundo: Obter os parâmetros correspondentes Método: POST Interface: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parâmetros: _json_att: Fio vazio Return: arquivo html, útil em análise de globalRepeatSubmitToken nas primeiras linhas, e obtendo o valor da variável ticketInfoForPassengerForm de abaixo, está em formato json, a partir do qual purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n para preparar os seguintes commits Terceiro: Obtenha o código de verificação do envio Método: GET Interface: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parâmetros: Nenhum Retorno: Retorna o fluxo binário de imagem, assim como o código de verificação de login Quarto: Verifique se a submissão pode ser confirmada Método: POST Interface: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parâmetros: cancel_flag:2 bed_level_order_num:00000000000000000000000000000000 passageirBilheteStr: Tipo de assento, 0, tipo de bilhete, nome, identidade, telefone, N (se houver mais de um, separados por vírgula) oldPassengerStr: Nome, Tipo de ID, Número de ID, Tipo de Usuário randCode: Código de verificação programada tour_flag:dc _json_att: Fio vazio REPEAT_SUBMIT_TOKEN: Obtenha do passo anterior Retorno: formato json para determinar se pode ser comprometido Quinto: Confirmar submissão Método: POST Interface: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parâmetros:
passageirBilheteStr: Tipo de assento, 0, tipo de bilhete, nome, identidade, telefone, N (se houver mais de um, separados por vírgula) oldPassengerStr: Nome, Tipo de ID, Número de ID, Tipo de Usuário randCode: Código de verificação programada purpose_codes: Passo 3 para conseguir key_check_isChange: Ibid leftTicketStr; Ibid train_locatio{filter}n; Ibid REPEAT_SUBMIT_TOKEN: Ibid _json_att: Fio vazio Retorno: formato json, determinar se a submissão foi bem-sucedida, devolver o tempo de espera e chamar a etapa 6 a cada certo período para devolver o resultado do processamento Sexto: Enquete para obter os resultados das submissões Método: GET Interface: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parâmetros:
aleatório: Números aleatórios Bandeira da Turnê: DC REPEAT_SUBMIT_TOKEN: Há uma terceira parte a ser obtida _json_att: Fio vazio Retornar: formato json, devolver o tempo de espera, se o tempo de espera for menor que 0, obtenha a informação do pedido orderId, se for maior que 0, continue a pesquisa 5. Perguntar sobre pedidos inacabados Método: POST Interface: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parâmetros: _json_att: Fio vazio Retorna: formato JSON, contém informações de ordem e analisa diretamente
Falando nisso, as 5 funções basicamente foram introduzidas, mas agora estão postadas apenas para aprender a usar, e não serão atacadas maliciosamente; além disso, a interface do site 12306 muda com muita frequência, e a interface postada agora pode ser alterada amanhã, então o importante é aprender a pegar interfaces e dados relevantes e analisar a partir desses dados para obter os parâmetros correspondentes e resultados correspondentes. Aqui eu uso principalmente o Firebug, a ferramenta de análise de rede que vem com o navegador Chrome, além das ferramentas Fiddler e Wireshark, e as instruções para usar ferramentas relacionadas, é só procurar na Internet. Por fim, vamos reclamar, o site 12306 usa tecnologia de cache estático CDN, o que leva à seleção dos servidores correspondentes de acordo com balanceamento de carga em diferentes regiões, largura de banda e carga, ou seja, existem muitos servidores 12306 pelo país. Cada usuário pode acessar os servidores possíveis são diferentes, mas apenas páginas estáticas e js, css e imagens, etc., mas cada servidor manterá a sessão diretamente compartilhada, ou seja, se você fizer login em um dos servidores, em outros servidores O que foi dito acima também equivale a ter desembarcado. Portanto, é melhor poder escolher um servidor dinamicamente para que os tempos de cache estejam atualizados, o estresse seja mínimo e os dados mais em tempo real. Na minha implementação, se você não fizer consulta uma vez, você mudará o IP do servidor uma vez. Quanto à tecnologia relevante, vou revelá-la depois. Mas o conteúdo deste artigo é suficiente para aprender. Você pode ver o endereço IP específico no http://tool.chinaz.com/dns. |