C#加群验证源码
验证方式
登录QQ帐号后查询是否加入了所在群聊
可直接拉出电脑已登录帐号进行快捷登录
首先看效果
代码展示
public void Init(Form form)
{
formUrl = form;
chromeBrowser = new ChromiumWebBrowser(“https://xui.ptlogin2.qq.com/cgi-bin/xlogin?pt_disable_pwd=1&appid=715030901&hide_close_icon=1&daid=73&pt_no_auth=1&s_url=https%3A%2F%2Fqun.qq.com%2F”);
chromeBrowser.Name = "CheckQunWeb";
formUrl.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
chromeBrowser.BringToFront();
Thread th = new Thread(WaitCookie);
th.IsBackground = true; th.Start();
}
private void WaitCookie()
{
while (true)
{
try
{
Thread.Sleep(1000);
Task<CefSharp.JavascriptResponse> t = chromeBrowser.EvaluateScriptAsync("document.cookie");
t.Wait();
var cookie = t.Result.Result;
string cookieStr = cookie.ToString();
cookieStr = cookieStr.Replace(" ", "");//删除中间多余空格
string[] cookies = cookieStr.Split(';');
string uin = "", skey = "", p_uin = "", p_skey = "";
foreach (string item in cookies)
{
string[] strings = item.Split(new char[] { '=', ';' });
switch (strings[0])
{
case "uin": uin = strings[1]; break;
case "skey": skey = strings[1]; break;
case "p_uin": p_uin = strings[1]; break;
case "p_skey": p_skey = strings[1]; break;
default: break;
}
}
if (uin.Length + skey.Length + p_uin.Length + p_skey.Length > 10)
{
PostSkey(skey, cookieStr);
return;
}
}
catch (Exception) { chromeBrowser.LoadUrl(qunUrl); }
}
}
private void PostSkey(string sk, string cookie)
{
int t = 5381;
foreach (char item in sk)
{
t += (t << 5) + Convert.ToInt16(item);
}
int bknNum = t & 2147483647;
HttpWebRequest request = HttpWebRequest.CreateHttp(“https://qun.qq.com/cgi-bin/qun_mgr/get_group_list”);
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("Cookie", cookie);
string bkn = "bkn=" + bknNum.ToString();
byte[] bytes = Encoding.UTF8.GetBytes(bkn);
request.ContentLength = bytes.Length;
Stream resstream = request.GetRequestStream();
resstream.Write(bytes, 0, bytes.Length);
resstream.Close();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream, Encoding.UTF8);
Console.WriteLine(sr.ReadToEnd());
//获取到返回的所有群数据
}