zoukankan      html  css  js  c++  java
  • QQ登陆篇

       前段时间想做个QQ的一个辅助工具,需要登陆QQ,从网上搜索了些资料,自己进行了实践和改造,可以成功登陆qq

    如图:

     1、获取登陆验证码,如下http://ptlogin2.qq.com/check?uin={0}&appid=15000101,如果获取的验证码为!开头,就可以不用获取图片验证码,否则需要获取图片验证码,地址为:http://captcha.qq.com/getimage?aid=1003903&&uin={0}&vc_type={1},vc_type为上次获取的验证码,注意:获取这些信息时,必须返回Cookie

     1         public static User getVerifyCodeImg(string qq)
     2         {
     3             HTTPModel hTTPModel = new HTTPModel(string.Format("http://ptlogin2.qq.com/check?uin={0}&appid=15000101", qq));
     4             WebHTTPUtil.sendHTTP(hTTPModel);
     5             CookieCollection cookie = hTTPModel.ReturnCookies;
     6             string value = WebHTTPUtil.GetValue(hTTPModel.ReturnHtml, "','""'");
     7             Console.WriteLine("yzm:" + value);
     8             User user = new User();
     9             if (value.Contains("!"))
    10             {
    11                 user.VerifyCode = value;
    12             }
    13             else
    14             {
    15                 string imgUrl = string.Format("http://captcha.qq.com/getimage?aid=1003903&&uin={0}&vc_type={1}"qq, value);
    16                 user.VerifyCodeUrl = imgUrl;
    17             }
    18             user.QQNum = qq;
    19             user.Cookie = cookie;
    20             return user;
    21 
    22         }

    2、获取验证码图片,设置图片控件的image属性this.verifyImg.Image = WebHTTPUtil.byteArrayToImage(imgUrl, ref cookie);

    View Code
     1         public static Image byteArrayToImage(string url, ref CookieCollection cookie)
     2         {
     3             Uri requestUri = new Uri(url);
     4             WebRequest webRequest = WebRequest.Create(requestUri);
     5             Image result;
     6             using (WebResponse response = webRequest.GetResponse())
     7             {
     8                 if (!string.IsNullOrEmpty(response.Headers[HttpResponseHeader.SetCookie]))
     9                 {
    10                     CookieContainer cookieContainer = new CookieContainer();
    11                     cookie = new CookieCollection();
    12                     cookieContainer.SetCookies(webRequest.RequestUri, response.Headers[HttpResponseHeader.SetCookie]);
    13                     cookie.Add(cookieContainer.GetCookies(webRequest.RequestUri));
    14                 }
    15                 using (Stream responseStream = response.GetResponseStream())
    16                 {
    17                     result = Image.FromStream(responseStream);
    18                 }
    19             }
    20             return result;
    21         }

    3.对QQ密码和验证码进行散列,使用MD5

            public static string binl2hex(byte[] buffer)
            {
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < buffer.Length; i++)
                {
                    stringBuilder.Append(buffer[i].ToString("x2"));
                }
                return stringBuilder.ToString();
            }
            public static string md5_3(string input)
            {
                MD5 mD = MD5.Create();
                byte[] buffer = mD.ComputeHash(Encoding.Default.GetBytes(input));
                buffer = mD.ComputeHash(buffer);
                buffer = mD.ComputeHash(buffer);
                return WebHTTPUtil.binl2hex(buffer);
            }
            public static string md5(string input)
            {
                byte[] buffer = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
                return WebHTTPUtil.binl2hex(buffer);
            }        
    View Code
     1         public static User LoginQZone(string qq, string pwd, string verifyCode, CookieCollection cookie, User u)
     2         {
     3             //object password = WebHTTPUtil.GetPassword(pwd, verifyCode);
     4             System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
     5             string QQPwd = Md5(Md5_3(pwd) + verifyCode.ToUpper());
     6             string loginUrl = string.Format("http://ptlogin2.qq.com/login?u={0}&p={1}&verifycode={2}&aid=15000101&u1=http%3A%2F%2Fimgcache.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&fp=loginerroralert", qq, QQPwd, verifyCode);
     7             HTTPModel hTTPModel = new HTTPModel(loginUrl);
     8             hTTPModel.Encoding = Encoding.UTF8;
     9             hTTPModel.PostCookies = cookie;
    10             WebHTTPUtil.sendHTTP(hTTPModel);
    11             User result;
    12             Console.WriteLine(QQPwd + "  " + verifyCode);
    13             Console.WriteLine(loginUrl);
    14             Console.WriteLine(hTTPModel.ReturnHtml);
    15 }

    当打印出如下,代表登陆成功

    http://ptlogin2.qq.com/login?u=***&p=***&verifycode=!4CP&aid=15000101&u1=http%3A%2F%2Fimgcache.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&fp=loginerroralert
    ptuiCB('0','0','http://imgcache.qq.com/qzone/v5/loginsucc.html?para=izone','1','登录成功!', 'heavy');

    第一步QQ登陆完成

  • 相关阅读:
    宝塔相关问题
    免费xshell下载
    服务器断电mysql无法恢复
    mysql相关知识
    svn
    tortoisesvn下载 和svn 安装
    nginx+lua乐观锁实现秒杀
    c# asp.net 生成唯一订单号
    c# 关闭软件 进程 杀死进程
    国内开源软件镜像地址搜集
  • 原文地址:https://www.cnblogs.com/wasp520/p/2436659.html
Copyright © 2011-2022 走看看