c# 模拟登陆(带验证码)

您所在的位置:网站首页 网页登录跳过验证码 c# 模拟登陆(带验证码)

c# 模拟登陆(带验证码)

2023-10-22 03:45| 来源: 网络整理| 查看: 265

在C#中,可以使用HttpWebRequest进行相关的模拟登陆,登陆后进行相关的操作,比如抓取数据,页面分析,制作相关登陆助手等等。

先说下流程

1.使用httpwebrequest先进入你要登录的网站,获取cookie

2.使用第一步获取的cookie到验证码的网页将验证码下载下来。

3.使用Post数据 发送至网站。如果有cookie则继续保存。

4.使用第三步的cookie登陆相关网页操作。

 

获取相关数据可以使用抓包工具进行抓取,如httpwatch。(网上下载的好多都有病毒,下载的时候注意点)

1。

view plain copy to clipboard print ? ///    /// 通过get方式请求页面,传递一个实例化的cookieContainer   ///    ///    ///    ///    public static ArrayList GetHtmlData(string postUrl, CookieContainer cookie)  {      HttpWebRequest request;      HttpWebResponse response;      ArrayList list = new ArrayList();      request = WebRequest.Create(postUrl) as HttpWebRequest;      request.Method = "GET";      request.UserAgent = "Mozilla/4.0";      request.CookieContainer = cookie;      request.KeepAlive = true;        request.CookieContainer = cookie;      try      {          //获取服务器返回的资源           using (response = (HttpWebResponse)request.GetResponse())          {              using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default))              {                  cookie.Add(response.Cookies);                  //保存Cookies                   list.Add(cookie);                  list.Add(reader.ReadToEnd());                  list.Add(Guid.NewGuid().ToString());//图片名               }          }      }      catch (WebException ex)      {          list.Clear();          list.Add("发生异常/n/r");          WebResponse wr = ex.Response;          using (Stream st = wr.GetResponseStream())          {              using (StreamReader sr = new StreamReader(st, System.Text.Encoding.Default))              {                   list.Add(sr.ReadToEnd());              }          }      }      catch (Exception ex)      {          list.Clear();          list.Add("5");          list.Add("发生异常:" + ex.Message);      }      return list;  }  

2.下载验证码,保存在本地。

view plain copy to clipboard print ? ///            /// 下载验证码图片并保存到本地           ///            /// 验证码URL           /// Cookies值           /// 保存位置/文件名           public static bool DowloadCheckImg(string Url, CookieContainer cookCon, string savePath)          {              bool bol = true;              HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Url);              //属性配置               webRequest.AllowWriteStreamBuffering = true;              webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;              webRequest.MaximumResponseHeadersLength = -1;              webRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";              webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)";              webRequest.ContentType = "application/x-www-form-urlencoded";              webRequest.Method = "GET";              webRequest.Headers.Add("Accept-Language", "zh-cn");              webRequest.Headers.Add("Accept-Encoding", "gzip,deflate");              webRequest.KeepAlive = true;              webRequest.CookieContainer = cookCon;              try              {                  //获取服务器返回的资源                   using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())                  {                      using (Stream sream = webResponse.GetResponseStream())                      {                          List list = new List();                          while (true)                          {                              int data = sream.ReadByte();                              if (data == -1)                                  break;                              list.Add((byte)data);                          }                          File.WriteAllBytes(savePath, list.ToArray());                      }                  }              }              catch (WebException ex)              {                  bol = false;              }              catch (Exception ex)              {                  bol = false;              }              return bol;          }  

3。发送post数据

view plain copy to clipboard print ? ///    /// 发送相关数据至页面   /// 进行登录操作   /// 并保存cookie   ///    ///    ///    ///    ///    public static ArrayList PostData(string postData, string postUrl, CookieContainer cookie)  {      ArrayList list = new ArrayList();      HttpWebRequest request;      HttpWebResponse response;      ASCIIEncoding encoding = new ASCIIEncoding();      request = WebRequest.Create(postUrl) as HttpWebRequest;      byte[] b = encoding.GetBytes(postData);      request.UserAgent = "Mozilla/4.0";      request.Method = "POST";      request.CookieContainer = cookie;      request.ContentLength = b.Length;      using (Stream stream = request.GetRequestStream())      {          stream.Write(b, 0, b.Length);      }        try      {          //获取服务器返回的资源           using (response = request.GetResponse() as HttpWebResponse)          {              using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))              {                  if (response.Cookies.Count > 0)                      cookie.Add(response.Cookies);                  list.Add(cookie);                  list.Add(reader.ReadToEnd());              }          }      }      catch (WebException wex)      {          WebResponse wr = wex.Response;          using (Stream st = wr.GetResponseStream())          {              using (StreamReader sr = new StreamReader(st, System.Text.Encoding.Default))              {                  list.Add(sr.ReadToEnd());              }          }      }      catch (Exception ex)      {          list.Add("发生异常/n/r"+ex.Message);      }      return list;  }  

4。就是第三步请求的链接地址换一个就行了

 

好了

以上核心代码已经贴出了

具体实现需要靠你们按照你们自己的逻辑

 

作者还说:

还有一些header能不写就不写,因为2天前一直在获取返回response这地方报500错误。

找了N多代码,看了N多资料都不可以。最后将一些header注释掉就可以了,真郁闷。

 

我马上试验,等有做出成熟的例子,再写新文章提供给大家!

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3