private string yzmDistinguish(Bitmap bitmap)
        {
            byte[] data = null;
            using (MemoryStream stream = new MemoryStream())
            {
                bitmap.Save(stream, ImageFormat.Png);
                data = new byte[stream.Length];
                stream.Seek(0, SeekOrigin.Begin);
                stream.Read(data, 0, Convert.ToInt32(stream.Length));
            }
            //必要的参数
            var param = new Dictionary <object, object>
            {
                { "username", account },
                { "password", password },
                { "typeid", yzmStyle },
                { "timeout", "90" },
                { "softid", softId },
                { "softkey", softKey }
            };
            //提交服务器
            string      httpResult = RuoKuaiHttp.Post("http://api.ruokuai.com/create.xml", param, data);
            XmlDocument xmlDoc     = new XmlDocument();

            try
            {
                xmlDoc.LoadXml(httpResult);
            }
            catch
            {
            }
            XmlNode idNode     = xmlDoc.SelectSingleNode("Root/Id");
            XmlNode resultNode = xmlDoc.SelectSingleNode("Root/Result");
            XmlNode errorNode  = xmlDoc.SelectSingleNode("Root/Error");
            string  result     = string.Empty;
            string  topidid    = string.Empty;

            if (resultNode != null && idNode != null)
            {
                topidid = idNode.InnerText;
                result  = resultNode.InnerText;
            }
            bitmap.Dispose();
            return(result);
        }
Beispiel #2
0
        public void Run(QqContext context)
        {
            var miniBrowser = (ScrapingBrowser)context["miniBrowser"];
            var userName    = context["userName"].ToString();

            var postForm = new NameValueCollection();

            postForm["uin"]     = userName;
            postForm["appid"]   = Constants.QqAppId;
            postForm["js_ver"]  = "10095";
            postForm["js_type"] = "0";
            postForm["u1"]      = "http://w.qq.com/proxy.html&r=0.6158497643191367";
            postForm["r"]       = "0.6158497643191367";

            var htmlStr = miniBrowser.NavigateTo(new Uri(Constants.QqMsgCheckUrl), HttpVerb.Get, postForm);

            //将验证码信息的三部分存入数组
            int checkCodePosition = htmlStr.IndexOf("(", StringComparison.Ordinal) + 1;
            var checkCode         = htmlStr.Substring(checkCodePosition, htmlStr.LastIndexOf(")", StringComparison.Ordinal) - checkCodePosition);
            var checkArray        = checkCode.Replace("'", "").Split(','); //验证码数组

            context["qq16"] = checkArray[2];
            if (checkArray[0] == "0")
            {
                context["code"]         = checkArray[1];
                context.QqMsgCodeStatus = QqMsgCodeStatus.NotNeedCode;
            }
            else if (checkArray[0] == "1")
            {
                //必要的参数
                var url   = string.Format(Constants.QqMsgCodeImageTemplate, Constants.QqAppId, "0.8478438374586403", userName);
                var param = new Dictionary <object, object>
                {
                    { "username", context["ruokuaiUser"] },
                    { "password", context["ruokuaiPwd"] },
                    { "typeid", context["ruokuaiTypeid"] },
                    { "timeout", "90" },
                    { "softid", context["ruokuaiSoftid"] },
                    { "softkey", context["ruokuaiSoftkey"] }
                };
                var wr = miniBrowser.DownloadWebResource(new Uri(url));
                try
                {
                    string httpResult = RuoKuaiHttp.Post("http://api.ruokuai.com/create.xml", param, wr.Content.ToArray());
                    var    xmlDoc     = new XmlDocument();
                    xmlDoc.LoadXml(httpResult);

                    XmlNode idNode     = xmlDoc.SelectSingleNode("Root/Id");
                    XmlNode resultNode = xmlDoc.SelectSingleNode("Root/Result");
                    //XmlNode errorNode = xmlDoc.SelectSingleNode("Root/Error");
                    if (resultNode != null && idNode != null)
                    {
                        //var topidid = idNode.InnerText;
                        var result = resultNode.InnerText;
                        context["code"]         = result;
                        context.QqMsgCodeStatus = QqMsgCodeStatus.NotNeedCode;
                        //停顿下,否则qq会认为是在攻击它
                        Thread.Sleep(2000);
                    }
                }
                catch (Exception ex)
                {
                    Log4Logger.Error(ex.Message, ex);
                }

                if (string.IsNullOrWhiteSpace((context["code"] ?? "").ToString()))
                {
                    var baseStartupPath = AppDomain.CurrentDomain.BaseDirectory;
                    if (!Directory.Exists(baseStartupPath + "\\CodeImages"))
                    {
                        Directory.CreateDirectory(baseStartupPath + "\\CodeImages");
                    }
                    File.WriteAllBytes(baseStartupPath + "\\CodeImages\\qqmsg_" + userName + ".jpg", wr.Content.ToArray());
                    context.QqMsgCodeStatus = QqMsgCodeStatus.NeedCode;
                    if ((bool)context["needSendMail"])
                    {
                        Log4Logger.Info("QQMsgLogger需要验证码,请尽快输入验证码!");
                        MailLogger.LogInfo("QQMsgLogger需要验证码,请尽快输入验证码!<a href='http://123.57.83.216:8001/QQMsgLogger/Check'>进入</a>");
                    }
                }
            }
            else
            {
                context.QqMsgStatus = QqMsgStatus.Fail;
            }
            context["verifysession"] = miniBrowser.GetCookie(new Uri(Constants.QqMsgCheckUrl), "verifysession").Value;
        }
 private void SynVerifier()
 {
     RuoKuaiHttp.Init(ipVerifyUsername.Text, ipVerifyPassword.Text);
 }
Beispiel #4
0
        /// <summary>
        ///获取验证信息
        //验证信息格式为:ptui_checkVC('0','!MIW','\x00\x00\x00\x00\x9a\x65\x0f\xd7')
        //其中分为三部分,第一个值0或1判断是否需要图片验证码
        //                第二个值是默认验证码,若不需要图片验证码,就用此验证码来提交
        //                第三部分是所使用的QQ号码的16进制形式
        /// </summary>
        /// <param name="scrapingBrowser"></param>
        /// <param name="htmlStr"></param>
        private void Check(ScrapingBrowser scrapingBrowser, string htmlStr)
        {
            cap_cd = string.Empty;

            //将验证码信息的三部分存入数组
            int checkCodePosition = htmlStr.IndexOf("(", System.StringComparison.Ordinal) + 1;
            var checkCode         = htmlStr.Substring(checkCodePosition, htmlStr.LastIndexOf(")", System.StringComparison.Ordinal) - checkCodePosition);
            var checkArray        = checkCode.Replace("'", "").Split(','); //验证码数组

            if (checkArray[0] == "0")
            {
                CodeStatus = CodeStatus.NotNeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode);
                Log4Logger.Info(UserName + " 获取验证信息成功! " + htmlStr);

                Login(checkArray[1]);
            }
            else if (checkArray[0] == "1")
            {
                cap_cd = checkArray[1];
                var ruokuaiUser    = ConfigurationManager.AppSettings["ruokuaiUser"] ?? "";
                var ruokuaiPwd     = ConfigurationManager.AppSettings["ruokuaiPwd"] ?? "";
                var ruokuaiTypeid  = ConfigurationManager.AppSettings["ruokuaiTypeid"] ?? "";
                var ruokuaiSoftid  = ConfigurationManager.AppSettings["ruokuaiSoftid"] ?? "";
                var ruokuaiSoftkey = ConfigurationManager.AppSettings["ruokuaiSoftkey"] ?? "";
                var param          = new Dictionary <object, object>
                {
                    { "username", ruokuaiUser },
                    { "password", ruokuaiPwd },
                    { "typeid", ruokuaiTypeid },
                    { "timeout", "90" },
                    { "softid", ruokuaiSoftid },
                    { "softkey", ruokuaiSoftkey }
                };
                var url = string.Format(CodeImage, AppId, UserName, cap_cd);
                var wr  = scrapingBrowser.DownloadWebResource(new Uri(url));
                try
                {
                    string httpResult = RuoKuaiHttp.Post("http://api.ruokuai.com/create.xml", param, wr.Content.ToArray());
                    var    xmlDoc     = new XmlDocument();
                    xmlDoc.LoadXml(httpResult);

                    XmlNode idNode     = xmlDoc.SelectSingleNode("Root/Id");
                    XmlNode resultNode = xmlDoc.SelectSingleNode("Root/Result");
                    //XmlNode errorNode = xmlDoc.SelectSingleNode("Root/Error");
                    if (resultNode != null && idNode != null)
                    {
                        //var topidid = idNode.InnerText;
                        var result = resultNode.InnerText;

                        CodeStatus = CodeStatus.NotNeedCode;
                        QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode);
                        Log4Logger.Info(UserName + " 获取验证信息成功! " + htmlStr);
                        QqMsgLogger.LogInfo(UserName + " 若快识别成功! ");
                        //停顿下,否则qq会认为是在攻击它
                        Thread.Sleep(2000);
                        Login(result);
                    }
                    else
                    {
                        CodeStatus = CodeStatus.NeedCode;
                        QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);
                        Log4Logger.Info(UserName + " 需要验证码,请尽快输入验证码!");
                    }
                }
                catch (Exception ex)
                {
                    Log4Logger.Error(ex.Message, ex);

                    CodeStatus = CodeStatus.NeedCode;
                    QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);

                    Log4Logger.Info(UserName + " 需要验证码,请尽快输入验证码!");
                    QqMsgLogger.LogInfo(UserName + " 若快识别失败! " + ex.Message, ex);
                }
            }
            else
            {
                CodeStatus = CodeStatus.NeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);
                Log4Logger.Error("Check失败!\r\n" + UserName + "\r\n" + htmlStr);
                QqMsgLogger.LogError("Check失败!" + UserName + ":" + htmlStr);
            }
        }