国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#利用HttpWebRequest和HttpWebResponse模擬登錄有驗證碼的網站

2019-11-14 16:30:02
字體:
來源:轉載
供稿:網友

我們經常會碰到需要程序模擬登錄一個網站,那如果網站需要填寫驗證碼的要怎樣模擬登錄呢?
這篇文章利用了 HttpWebRequest 和 HttpWebResponse 模擬登錄了有驗證碼的網站。

程序設計的界面很簡單,三個TextBox分別輸入用戶名、密碼和驗證碼,一個Image控件顯示從網站請求到的驗證碼圖片,還有兩個按鈕,一個換驗證碼,一個登錄。

寫程序前,先用瀏覽器的開發者工具觀察下登錄頁面有什么請求,我這里用的是 FireBug,下面兩個圖是在 FireBug 的網絡面板中截的。

可以看到打開登錄頁面時有個 GET 請求驗證碼的,在 FireBug 中可以看到:

上面的圖上可以看到這一句: Set-Cookie GUID=c89eabb62d9d4f35b491a8afd371b4ad; path=/

這里請求的驗證碼頁面保存了一個Cookie。

然后我們輸入驗證碼,點擊“登錄”的時候有個 POST 請求,在 FireBug 可以看到:

這里的重點是這句:CodeStatus=&bkurl=&companyid=&username=test&passWord=test&Validate=yyxe

從這里我們可以看到用戶名、密碼還有驗證碼提交的方式。

下面大概說下程序的步驟:

1. 請求驗證碼,顯示在程序界面上,并且保存Cookie。

2. 提交姓名、密碼和驗證碼數據,獲得響應。

 

我這里是WPF程序,如果是Winform也類似。

完整代碼如下:

        CookieContainer cookies = null;        string strCookies = string.Empty;        PRivate void btnChangeValidate_Click(object sender, RoutedEventArgs e)        {            GetValidateImage();        }        /// <summary>        /// 獲取驗證碼和Cookie        /// </summary>        private void GetValidateImage()        {            cookies = new CookieContainer();            string url = "http://******/picturetimestamp.asp";  //驗證碼頁面            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);            request.Accept = "*/*";            request.Method = "GET";            request.UserAgent = "Mozilla/5.0";            request.CookieContainer = new CookieContainer(); //暫存到新實例            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            MemoryStream ms = null;            using (var stream = response.GetResponseStream())            {                Byte[] buffer = new Byte[response.ContentLength];                int offset = 0, actuallyRead = 0;                do                {                    actuallyRead = stream.Read(buffer, offset, buffer.Length - offset);                    offset += actuallyRead;                }                while (actuallyRead > 0);                ms = new MemoryStream(buffer);            }            response.Close();            cookies = request.CookieContainer; //保存cookies            strCookies = request.CookieContainer.GetCookieHeader(request.RequestUri); //把cookies轉換成字符串            BitmapImage bi = new BitmapImage();            bi.BeginInit();            bi.StreamSource = (Stream)ms;            bi.EndInit();            imgValidate.Source = bi;        }        private void btnLogin_Click(object sender, RoutedEventArgs e)        {            Login();        }        /// <summary>        /// 登錄        /// </summary>        /// <returns></returns>        private string Login()        {            HttpWebRequest request = null;            string url = "http://******/loginproc.asp";   //登錄頁面            request = (HttpWebRequest)WebRequest.Create(url);            request.Method = "POST";            request.Accept = "*/*;";            request.UserAgent = "Mozilla/5.0";            request.ContentType = "application/x-www-form-urlencoded";            request.AllowAutoRedirect = true;            request.CookieContainer = cookies;            request.KeepAlive = true;            string postData = string.Format("username={0}&password={1}&Validate={2}&isautologin=1&Submit=", txtUserName.Text, txtPassword.Text, txtValidate.Text);  //這里按照前面FireBug中查到的POST字符串做相應修改。            byte[] postdatabyte = Encoding.UTF8.GetBytes(postData);            request.ContentLength = postdatabyte.Length;            using (Stream stream = request.GetRequestStream())            {                stream.Write(postdatabyte, 0, postdatabyte.Length);            }            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            string strWebData = string.Empty;            using (StreamReader reader = new StreamReader(response.GetResponseStream()))            {                strWebData = reader.ReadToEnd();            }            return strWebData;        }

希望可以幫到有需要的人。

原文地址:http://m.survivalescaperooms.com/mib23/p/3913016.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳原县| 浮山县| 峨眉山市| 维西| 新巴尔虎左旗| 凉山| 瑞昌市| 沅江市| 罗甸县| 北票市| 温泉县| 阿图什市| 分宜县| 绥芬河市| 洛川县| 翁源县| 南川市| 右玉县| 安新县| 垫江县| 密云县| 铁岭县| 时尚| 安陆市| 沅江市| 诸暨市| 吉安市| 嘉荫县| 宁蒗| 遵义县| 永嘉县| 白城市| 兴海县| 库伦旗| 商城县| 白城市| 哈巴河县| 岫岩| 阜平县| 井陉县| 综艺|