首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現 12306 自動登錄:證書信任、驗證碼識別與 WPF 介面整合

     編輯:關於C語言

延續餘票查詢,本文實現 12306 自動登錄功能。核心難點在於 HTTPS 證書驗證繞過、動態驗證碼獲取、登錄表單參數構造。採用 WPF 構建測試介面,核心邏輯封裝於 Login12306Manager 靜態類。

關鍵技術點

1. 忽略 SSL 證書錯誤

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, errors) => true;

或封裝為 Messenger 事件總線模式(代碼中略)。

2. 登錄流程與參數

  1. 獲取驗證碼圖片:GET https://dynamic.12306.cn/otsweb/passCodeNewAction.do?module=login&rand=sjrand&{random},保存 Cookie。
  2. 獲取 loginRand:POST https://dynamic.12306.cn/otsweb/loginAction.do?method=loginAysnSuggest,解析 JSON 返回 loginRand。
  3. 提交登錄表單:POST https://dynamic.12306.cn/otsweb/loginAction.do?method=login,關鍵參數:
loginRand={0}&refundLogin=N&refundFlag=Y&isClick=&form_tk=null
&loginUser.user_name={1}&nameErrorFocus=
&user.password={2}&passwordErrorFocus=
&randCode={3}&randErrorFocus=
&NDU0NzY4NA%3D%3D=Nzg4ZDAxMGNkYTZlMTRjZA%3D%3D
&myversion=undefined

三個動態值:loginRand、用戶名、密碼、驗證碼。

3. 響應判斷邏輯

  • 包含「請輸入正確的驗證碼」 → 驗證碼錯誤
  • 包含「當前訪問用戶過多」 → 限流
  • 正則提取 isLogin=true + u_name → 登錄成功
  • 其他錯誤信息 → 用戶名/密碼錯誤或未知失敗

WPF 測試介面



    
        
        
        
        
            
            
            

後台代碼片段

private void ButtonLogin_Click(object sender, RoutedEventArgs e) {
    string html = Login12306Manager.Login(txtUserName.Text, txtPassword.Password, txtRandCode.Text);
    rtxResultContent.AppendText(html);
}

private void ButtonRefreshRandCode_Click(object sender, RoutedEventArgs e) {
    string path = Login12306Manager.RefreshCode(); // 返回本地圖片路徑
    if (File.Exists(path)) imageRandCode.Source = new BitmapImage(new Uri(path));
}

完整管理類結構

  • Login12306Manager.Login(user, pwd, randCode) → 返回登錄結果字符串
  • Login12306Manager.RefreshCode() → 下載驗證碼圖片,返回本地路徑
  • Login12306Manager.DoGetLoginRand() → 獲取 loginRand
  • 內部 Messenger 事件總線用於日誌輸出
  • BeforLoginRnad DTO 對應 JSON 反序列化

⚠️ 重要提醒

  • 12306 接口、加密參數、驗證碼機制頻繁變動,代碼具時效性,僅供學習 HTTP 模擬登錄原理。
  • 生產環境需引入驗證碼識別服務(OCR/打碼平台)、IP 代理池、請求頻率控制。
  • 請遵守《計算機信息網絡國際聯網管理暫行規定》等法律法規,勿用於非法搶票、倒票。

項目源碼:Test12306AutoLogin (.NET 4.0, VS2010)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved