示例#1
0
            /// <summary>
            ///  Автоматически загружает изображение на сервер и отпрвляет ответ на pingBackUrl.
            /// </summary>
            /// <param name="imageUrl">URL с картинкой</param>
            public async Task <ResponseData> SolveCaptchaCallBack(string imageUrl)
            {
                var stream = await imageUrl.GetStreamAsync();

                var response = await "https://rucaptcha.com/in.php".PostMultipartAsync(mp =>
                {
                    mp.AddStringParts(new
                    {
                        key      = _key,
                        method   = "post",
                        pingback = _pingBackUrl,
                        json     = 1
                    });
                    mp.AddFile("file", stream, "captcha_img.jpg");
                });

                var responseStr = await response.GetStringAsync();

                if (_debugger)
                {
                    Debugger.Log(0, null, $"Type: [IN]\r\nURL: [{imageUrl}]\r\nResponse: [{responseStr}]\r\n");
                }

                HandleError.ProcessResponse(responseStr, out var value);

                return(value);
            }
示例#2
0
            /// <summary>
            /// Решает капчу по ID.
            /// </summary>
            /// <param name="reId">ID загруженной капчи</param>
            /// <param name="retrySec">Повторный запрос через N-секунд</param>
            /// <param name="retryCount">Количество попыток для решения капчи</param>
            /// <returns></returns>
            public async Task <ResponseData> SolveCaptcha(string reId, byte retrySec = 15, byte retryCount = 5)
            {
                while (true)
                {
                    retryCount--;

                    var response = await "https://rucaptcha.com/res.php".PostUrlEncodedAsync(new
                    {
                        key    = _key,
                        action = "get",
                        id     = reId,
                        json   = 1
                    });

                    var result = await response.GetStringAsync();

                    if (_debugger)
                    {
                        Debugger.Log(0, null, $"Type: [RES]\r\nID: [{reId}]\r\nResponse: [{result}]\r\n");
                    }

                    if (HandleError.ProcessResponse(result, out var value))
                    {
                        return(value);
                    }

                    if (retryCount == 0 || string.IsNullOrEmpty(reId))
                    {
                        return(value);
                    }

                    await Task.Delay(retrySec * 1000);
                }
            }
示例#3
0
            /// <summary>
            /// Загружает текст капчи сервер.
            /// </summary>
            /// <param name="text">Текстовая инструкция</param>
            /// <returns></returns>
            public async Task <ResponseData> SendCaptchaText(string text)
            {
                var response = await "https://rucaptcha.com/in.php".PostUrlEncodedAsync(new
                {
                    key         = _key,
                    textcaptcha = text,
                    json        = 1
                });

                var result = await response.GetStringAsync();

                if (_debugger)
                {
                    Debugger.Log(0, null, $"Type: [IN]\r\nText: [{text}]\r\nResponse: [{result}]\r\n");
                }

                HandleError.ProcessResponse(result, out var value);

                return(value);
            }
示例#4
0
            /// <summary>
            /// Загружает страницу капчи на сервер.
            /// </summary>
            /// <param name="googleKey">Значение параметра k или data-sitekey, которое вы нашли в коде страницы</param>
            /// <param name="url">Полный URL страницы, на которой вы решаете ReCaptcha V2</param>
            /// <param name="invis">Определяет тип капчи. 1 - невидимая, 0 - видимая</param>
            /// <returns></returns>
            public async Task <ResponseData> SendCaptchaData(string googleKey, string url, byte invis = 0)
            {
                var response = await "https://rucaptcha.com/in.php".PostUrlEncodedAsync(new
                {
                    key       = _key,
                    method    = "userrecaptcha",
                    googlekey = googleKey,
                    pageurl   = url,
                    invisible = invis,
                    json      = 1
                });

                var result = await response.GetStringAsync();

                if (_debugger)
                {
                    Debugger.Log(0, null, $"Type: [IN]\r\nURL: [{url}]\r\nGoogleKey: [{googleKey}]\r\nResponse: [{result}]\r\n");
                }

                HandleError.ProcessResponse(result, out var value);

                return(value);
            }
示例#5
0
        /// <param name="key">Ключ разработчика</param>
        /// <param name="pingBackUrl">URL для отправки ответов</param>
        /// <param name="debugger">Включить логирование</param>
        public Solver(string key, string pingBackUrl = null, bool debugger = false)
        {
            _key         = key;
            _debugger    = debugger;
            _pingBackUrl = pingBackUrl;

            if (_pingBackUrl == null)
            {
                return;
            }

            var result = CallBackHelper.PingBackAction(_key, _pingBackUrl, PingBack.Add).Result;

            if (_debugger)
            {
                Debugger.Log(0, null, $"Type: [RES]\r\nURL: [{_pingBackUrl}]\r\nResponse: [{result}]\r\n");
            }

            if (!HandleError.ProcessResponse(result, out var _))
            {
                throw new Exception($"Сервер вернул ошибку: {result}");
            }
        }