На этой странице будут рассмотрены примеры использования библиотеки Antigate.NET на примере языка программирования C# для решения капчи с использованием сервиса antigate.com.
Все входящие параметры функций всех классов библиотеки проверяются на соответствие ожидаемым данным и в случае обнаружения ошибки выбрасывается System.ArgumentException исключение с соответствующим сообщением.
Рассмотрим процесс простой отправки изображения капчи на сервер Antigate и получение ответа:
try { AntiCaptcha anticap = new AntiCaptcha("СЕКРЕТНЫЙ_КЛЮЧ"); // Отправляем изображение captcha.png и ждем решения капчи string answer = anticap.GetAnswer("./captcha.png"); if(answer != null) Console.WriteLine("Ответ: {0}", answer); } catch (AntigateErrorException aee) { // Antigate ответил одной из документированных в API ошибкой Console.WriteLine("Ошибка Antigate: {0}", aee.Message); } catch (Exception e) {} // исключение иного родаПрограммный код выше загрузит изображение captcha.png в каталоге с программой на сервер antigate для его решения, дождется выполнения процесса и выведет результат (или ошибку) в консоль.
Создавая объект класса AntiCaptcha обязательным параметром конструктора является ваш секретный ключ в система antigate:
AntiCaptcha anticap = new AntiCaptcha("СЕКРЕТНЫЙ_КЛЮЧ");Именно этот ключ будет использоваться для последующей загрузки капч.
Для удобства работы класс AntiCaptcha имеет дополнительные настройки для таймаутов и повторных попыток подключения к серверам antigate.
anticap.CheckDelay = 10000; // Задержка проверки готовности капчи. Стандартно: 15000. (15 сек.) anticap.CheckRetryCount = 20; // Кол-во попыток проверки готовности капчи. Стандартно: 30 anticap.SlotRetry = 5; // Кол-во попыток получения нового слота. Стандартно: 3 anticap.SlotRetryDelay = 800; // Задержка повторной попытки получения слота на Antigate. Стандартно: 1000Все задержки указываются в миллисекундах, включены по умолчанию и имеют свои стандартные значения.
Сервис antigate.com поддерживает обработку дополнительных (опциональных) параметров при загрузке капчи. Работа с ними в Antigate.NET реализована следующим образом:
anticap.Parameters.Set("min_len", "2"); // минимальная длина текста на капче anticap.Parameters.Set("max_len", "10"); // максимальная длина текста на капче anticap.Parameters.Set("is_russian", "1"); // показать капчу русского работникуСписок поддерживаемых параметров расположен тут: http://antigate.com/panel.php?action=api
Отправка капчи поддерживает несколько режимов работы. В примере выше мы использовали путь к файлу изображения для его отправки:
string answer = anticap.GetAnswer("./captcha.png");Всего существует 3 режима работы:
public string GetAnswer(byte[] ImageData); // изображение в виде массива данных public string GetAnswer(Image Img); // изображение в виде объекта Image public string GetAnswer(string ImageFilePath); // путь к файлу на диске
Оповещения antigate о не верно разгаданной капче осуществляется вызовом функции AntiCaptcha.FalseCaptcha() следующим образом:
AntiCaptcha anticap = new AntiCaptcha("СЕКРЕТНЫЙ_КЛЮЧ"); ... // загрузка капчи и её проверка ... if(captchaIsFalse) anticap.FalseCaptcha();Осуществляется лишь одна попытка выполнения запроса. В случае неудачи - будет выброшено System.Net.WebException исключение.
В ходе тестов могут возникнуть различные ошибки, начинающиеся на ERROR (см. тут). Это означает что ваша капча не принята.
Обрабатываются они следующим образом: В случае возникновения ошибки функция выбрасывает исключение Akumu.Antigate.AntigateErrorException с пояснительным сообщением.
Суммируя всё выше-перечисленное напишем программный код, использующий большинство возможностей библиотеки:
AntiCaptcha anticap = new AntiCaptcha(apiKey.Text); // пользовательские настройки anticap.CheckDelay = 10000; anticap.CheckRetryCount = 20; anticap.SlotRetry = 5; anticap.SlotRetryDelay = 800; // доп. параметры капчи anticap.Parameters.Set("min_len", "2"); anticap.Parameters.Set("max_len", "10"); if(isRusCaptcha) anticap.Parameters.Set("is_russian", "1"); try { // отправляем файл и ждем ответа string answer = anticap.GetAnswer("./captcha.png"); if (answer != null) Console.WriteLine("Ответ: {0}", answer); else Console.WriteLine("Ответ не получен."); if(!answer.Equals("abcdef")) // пример anticap.FalseCaptcha(); } catch (AntigateErrorException aee) { Console.WriteLine("Ошибка antigate: {0}", aee.Message); } catch (Exception e) { Console.WriteLine("Ошибка: {0}", e.Message); }
Статический класс: Akumu.Antigate.Tools.ReCaptcha
Доступные функции:
// Функция возвращает string массив с ссылками на JS скрипты всех капч на странице. // Контент этих страниц можно передавать функции ReCaptcha.GetObject(string) public static string[] GetObjectsUrlsOnPage(string PageContent) // Функция возвращает объект ReCaptchaObject, содержащий в себе URL изображения капчи // и recaptcha_challenge_field. public static ReCaptchaObject GetObject(string ScriptPage)
Пример использования:
using (WebClient client = new WebClient()) { // загружаем страницу содержащую ReCaptcha string page = client.DownloadString("http://www.google.com/recaptcha/demo/"); try { // массив ссылок на js капч string[] js = ReCaptcha.GetObjectsUrlsOnPage(page); if (js == null) Console.WriteLine("ReCaptcha не обнаружена на указанной странице"); else { // работаем с первым js на странице ReCaptchaObject rco = ReCaptcha.GetObject(client.DownloadString(js[0])); if (rco == null) Console.WriteLine("ReCaptcha на странице содержит ошибку"); else { Console.WriteLine("URL капчи: {0}", rco.ImageURL); Console.WriteLine("Challenge: {0}", rco.Challenge); } } } catch (Exception ex) { Console.WriteLine("Ошибка: {0}", ex.Message); } }