天天看點

12306.cn網站自動登入器源代碼

去年過年放假的時候寫了一個12306.cn網站的自動登入器,剛好那時候放假了,是以沒把源代碼放出來,現在将代碼發出來,由于編寫得比較倉促(從放假的下午19:00左右到晚上到00:00左右),很多細節問題考慮不是很全面,如斷網的情況未考慮,界面比較簡單,錯誤之處請大家批評指正.

注意:本程式基于.net framework4.0編寫,UI使用WPF

源代碼下載下傳位址1:

http://115.com/file/e7l5t4uw 源代碼下載下傳位址2: http://files.cnblogs.com/loyldg/AutoLogin12306_src.rar

        其實自動登入比較簡單,就是發送一個http請求并傳遞參數,然後對響應的結果進行分析處理.下面我列出需要注意的幾個問題.

1.發送http請求時,需要對傳遞的參數進行Url編碼(使用HttpUtility.UrlEncode方法)

2.重新整理驗證碼後,需要将目前的Cookie資訊替換(重新整理驗證碼後會産生的新的Cookie,使用此Cookie替換原有Cookie資訊即可)

3.處理Https證書問題,直接信任所有證書即可.

12306.cn網站自動登入器源代碼
private  void SetCertificatePolicy()
        {
            ServicePointManager.ServerCertificateValidationCallback
                       += RemoteCertificateValidate;
        }

        private  bool RemoteCertificateValidate(
           object sender, X509Certificate cert,
            X509Chain chain, SslPolicyErrors error)
        {
            return true;
        }      
12306.cn網站自動登入器源代碼
4.登入成功後,打開IE浏覽器,并将登入成功後的Cookie資訊傳遞到IE浏覽器,這裡需要使用到InternetSetCookie方法,該方法在wininet.dll中.      
關鍵代碼如下:      
12306.cn網站自動登入器源代碼
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool InternetSetCookie(string lpszUrl, string lbszCookieName, string lpszCookieData);

private void OpenIEWithCookie(CookieCollection cookies,string url)
        {
            string expires = "expires=Sun,22-Feb-2099 00:00:00 GMT";            
            foreach (Cookie item in cookies)
            {
               bool isSuccess= InternetSetCookie(item.Path, item.Name, string.Format("{0};{1}",item.Value,expires));
               if (!isSuccess)
               {
                   int errorCode = Marshal.GetLastWin32Error();
                   App.Messenger.NotifyColleagues(Msg.APPEND_MESSAGE, "set cookie error,errorCode:"+errorCode);
               }
            }
            string ieFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\Internet Explorer\\iexplore.exe";
            if (File.Exists(ieFilePath))
            {
                System.Diagnostics.Process.Start(ieFilePath, url);
                App.Messenger.NotifyColleagues(Msg.APPEND_MESSAGE, "Open Url:" + url);
            }
            else
            {
                App.Messenger.NotifyColleagues(Msg.APPEND_MESSAGE, "未找到IE浏覽器");
            }
        }      
12306.cn網站自動登入器源代碼

作者:

loyldg

出處:

http://www.cnblogs.com/loyldg/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。如有問題,可以郵件:

[email protected] 

 聯系我,非常感謝。