去年過年放假的時候寫了一個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證書問題,直接信任所有證書即可.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZzUTOhljM0cTO2ATOwATNxMWM1EWYxEjY5ADNlFTNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
private void SetCertificatePolicy()
{
ServicePointManager.ServerCertificateValidationCallback
+= RemoteCertificateValidate;
}
private bool RemoteCertificateValidate(
object sender, X509Certificate cert,
X509Chain chain, SslPolicyErrors error)
{
return true;
}
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZzUTOhljM0cTO2ATOwATNxMWM1EWYxEjY5ADNlFTNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
4.登入成功後,打開IE浏覽器,并将登入成功後的Cookie資訊傳遞到IE浏覽器,這裡需要使用到InternetSetCookie方法,該方法在wininet.dll中.
關鍵代碼如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZzUTOhljM0cTO2ATOwATNxMWM1EWYxEjY5ADNlFTNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
[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浏覽器");
}
}
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQWZzUTOhljM0cTO2ATOwATNxMWM1EWYxEjY5ADNlFTNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
作者:
loyldg出處:
http://www.cnblogs.com/loyldg/本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。如有問題,可以郵件:
[email protected]聯系我,非常感謝。