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   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值