12306 官方未公開開放 API。第三方(携程、360、飛豬等)通過逆向工程實現:
/passport/web/login 等/otn/leftTicket/query/otn/confirmSingleForQueue/pay/payOrderUser-Agent, Referer, Cookie, Content-Type# 伪代碼流程
session = requests.Session()
session.headers.update(browser_headers)
# 1. 獲取驗證碼圖片 → OCR/人工識別
captcha = solve_captcha(session.get(captcha_url).content)
# 2. 登錄
login_data = {
'username': encrypt_rsa(username),
'password': encrypt_rsa(password),
'captcha': captcha,
'device_fingerprint': gen_fingerprint()
}
session.post(login_url, data=login_data)
# 3. 查票
tickets = session.post(query_url, data=query_params).json()
# 4. 下單
order = session.post(confirm_url, data=order_params).json()
# 5. 支付(通常跳轉銀行/支付寶,需回調確認)
pay_result = handle_payment_callback()
第三方購票 = 逆向 12306 私有接口 + 模擬瀏覽器行為 + 對抗反爬策略。技術門檻在於持續維護接口兼容性與反爬對抗,而非業務邏輯本身。