下单卡在 initDc,12306 直接 302 到 error.html,requests 下单确认链路疑似已失效
Author: loyputhCreated Mar 20, 2026Updated Mar 20, 2026
问题描述
项目当前在下单确认阶段稳定失败,现象如下:
- 用户登录正常
- 查票正常
submitOrderRequest成功- 随后请求
/otn/confirmPassenger/initDc - 12306 直接跳转到:
https://www.12306.cn/mormhweb/logFiles/error.html - 导致拿不到后续下单必须字段:
globalRepeatSubmitTokenticketInfoForPassengerForm
日志表现
检查完成 开始提交订单
提交订单成功
请求初始化订单页面返回异常页,第 1 次重试 ...
请求初始化订单页面返回异常页,第 2 次重试 ...
请求初始化订单页面失败,页面解析异常: 缺少字段: globalRepeatSubmitToken, ticketInfoForPassengerForm更明确的诊断信息是:
status=200
url=https://www.12306.cn/mormhweb/logFiles/error.html已确认结论
不是登录失效
用户状态正常,is_loaded=true,is_ready=true不是查票问题
查询正常,能持续发现有票车次不是 submitOrderRequest 没发出
日志已明确出现“提交订单成功”不是单纯正则解析失败
initDc原始响应不是正常确认页,而是错误页纯 requests 链路疑似已被 12306 现网逻辑拦截
当前旧的submitOrderRequest -> initDc -> checkOrderInfo流程可能已经不兼容
进一步排查结果
我还做过一组对比:
- 纯
requests访问initDc:会被 302/跳转到error.html - 尝试用浏览器上下文兜底:现象明显不同,说明问题核心不只是 cookie,而是当前 12306 可能已经依赖真实浏览器运行态 / 新链路上下文
期望
- 重构
submitOrderRequest -> initDc -> checkOrderInfo这段兼容逻辑 - 增加更完整的调试输出:
- 状态码
- 最终 URL
- 重定向链
- 原始 HTML 落盘
- 如果纯 requests 已不兼容,希望支持真实浏览器上下文兜底
- 建议按当前 12306 官网真实“点击预订 -> 确认订单页”链路重新适配
结论
当前真正的阻塞点不是没票,也不是没登录,而是:
initDc 被 12306 直接导向 error.html,无法进入确认订单流程
Source: pjialin/py12306