C#模拟登录Discuz论坛 附代码 Discuz X1.5

本方法通过将账号和密码提交到登录页面,返回一个CookieContainer类型的COOKIE容器,需要模拟登录访问的时候带着这个CookieContainer访问指定地址便可。
 
  1 #region Discuz论坛登录
  2  
  3         /// <summary>
  4  
  5         /// Discuz论坛登录
  6  
  7         /// </summary>
  8  
  9         /// <param name="UserName">账号</param>
 10  
 11         /// <param name="PassWord">密码</param>
 12  
 13         /// <param name="domain">论坛地址(末尾加斜线),如 http://www.njxsw.com/</param>
 14  
 15         /// <returns></returns>
 16  
 17         protected CookieContainer DiscuzLogin(string UserName, string PassWord, string domain)
 18  
 19         {            #region 取得登录表单页源代码
 20  
 21             string loginPageUrl = domain + "member.php?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login";
 22  
 23             string loginPageHtml = ForSunSoft.Net.Url.Post(new NameValueCollection(),
 24  
 25                 loginPageUrl,
 26  
 27                 System.Text.Encoding.GetEncoding("GBK"),
 28  
 29                 new CookieContainer(),
 30  
 31                 "*/*",
 32  
 33                 domain + "forum.php",
 34  
 35                 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)");
 36  
 37             #endregion            #region 获取验证页面地址
 38  
 39             Match match_UserValidateUrl = new Regex(";\" action=\"(?<key>.*?)\">", RegexOptions.None).Match(loginPageHtml);
 40  
 41             string UserValidateUrl = match_UserValidateUrl.Groups["key"].Value.ToS();
 42  
 43             #endregion            #region 获取表单哈希码
 44  
 45             Match match_FormHash = new Regex("<input type=\"hidden\" name=\"formhash\" value=\"(?<key>.*?)\" />", RegexOptions.None).Match(loginPageHtml);
 46  
 47             string FormHash = match_FormHash.Groups["key"].Value.ToS();
 48  
 49             #endregion            #region 创建登录表单
 50  
 51             NameValueCollection loginForm = new NameValueCollection();
 52  
 53             loginForm.Add("formhash", FormHash);
 54  
 55             loginForm.Add("referer", domain + "forum.php");
 56  
 57             loginForm.Add("loginfield""username");
 58  
 59             loginForm.Add("username", UserName);
 60  
 61             loginForm.Add("password", PassWord);
 62  
 63             loginForm.Add("questionid""0");
 64  
 65             loginForm.Add("answer""");
 66  
 67             loginForm.Add("cookietime""2592000");
 68  
 69             #endregion            #region 获得Auth和Sid
 70  
 71             CookieCollection userCookie = new CookieCollection();            CookieCollection ResCookie = ForSunSoft.Net.Url.PostAndGetCookie(loginForm, domain + UserValidateUrl.Replace("&amp;""&"), System.Text.Encoding.GetEncoding("GBK"));
 72  
 73             foreach (Cookie c in ResCookie)
 74  
 75             {
 76  
 77                 if (c.Name == "8TcA_2132_auth" || c.Name == "8TcA_2132_sid")
 78  
 79                 {
 80  
 81                     userCookie.Add(c);
 82  
 83                 }
 84  
 85             }
 86  
 87             #endregion
 88  
 89             CookieCollection cookieResult = ForSunSoft.Net.Url.PostAndGetCookie(new NameValueCollection(), domain + "forum.php", System.Text.Encoding.GetEncoding("GBK"), userCookie.ToCookieContainer());
 90  
 91             foreach (Cookie c in userCookie)
 92  
 93             {
 94  
 95                 cookieResult.Add(c);
 96  
 97             }             return cookieResult.ToCookieContainer();         }
 98  
 99         #endregion
100  
代码中有部分自定义方法,需要的留下邮箱。
 
原文地址:https://www.cnblogs.com/kuibono/p/CSharpLoginDiscuz.html