Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти капчу с помощью PHP

Грегори Фишер
Грегори Фишер

Технический специалист

Введение

При разработке веб-скраперов, автоматизации тестирования или создании ботов на PHP разработчики часто сталкиваются с необходимостью обхода капчи. Написание собственных cURL-запросов, реализация циклов опроса и обработка таймаутов усложняют код и отвлекают от основной бизнес-логики.

В этом руководстве мы рассмотрим, как использовать официальную PHP-библиотеку для интеграции с API 2Captcha. Мы разберем процесс установки, инициализацию клиента, решение Capy Puzzle и других популярных типов капч, а также составим полный список всех поддерживаемых сервисом типов защиты.

Установка и подключение

Библиотека распространяется через Composer и легко интегрируется в любые PHP-проекты, от простых скриптов до крупных приложений на фреймворках вроде Laravel или Symfony.

Установить пакет можно с помощью следующей команды в терминале:

bash Copy
composer require 2captcha/2captcha

После установки подключите автозагрузчик Composer в вашем скрипте и импортируйте основной класс:

php Copy
require __DIR__ . '/vendor/autoload.php';
use TwoCaptcha\TwoCaptcha;

Инициализация клиента

Для начала работы необходимо создать экземпляр класса TwoCaptcha, передав ему ваш API-ключ. В целях безопасности рекомендуется хранить ключ в переменных окружения или конфигурационных файлах, а не в исходном коде.

php Copy
$apiKey = getenv('CAPTCHA_API_KEY');
$solver = new TwoCaptcha($apiKey);

Решение Capy Puzzle

Capy Puzzle — это интерактивная капча, где пользователю нужно собрать пазл или переместить элемент в нужную позицию. Для её решения через API необходимо передать websiteKey (уникальный ключ капчи) и URL страницы.

php Copy
try {
    $result = $solver->capy([
        'sitekey' => 'PUZLE_abcdef1234567890',
        'url'     => 'https://example.com/login'
    ]);
    echo "Answer: " . $result['answer'];
    echo "Challenge Key: " . $result['challenge_key'];
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}

Ответ содержит два значения: answer и challenge_key. Оба нужно передать на целевой сайт, обычно в скрытых полях формы.

Решение других популярных типов капч

reCAPTCHA v2 и Invisible

Для обхода reCAPTCHA необходимо передать sitekey и URL страницы. Если используется невидимая версия капчи, добавьте параметр invisible со значением 1.

php Copy
try {
    $result = $solver->recaptcha([
        'sitekey' => '6LeTxvsqAAAAAK...',
        'url'     => 'https://example.com/login',
        'invisible' => 1
    ]);
    echo "Токен g-recaptcha-response: " . $result->code;
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}

Cloudflare Turnstile

Современная защита от Cloudflare требует передачи sitekey и URL страницы. Для повышения шансов на успешное прохождение рекомендуется передать актуальный User-Agent.

php Copy
try {
    $result = $solver->turnstile([
        'sitekey' => '0x4AAAAAA...',
        'url'     => 'https://example.com/protected',
        'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36'
    ]);
    echo "Токен cf-turnstile-response: " . $result->code;
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}

Текстовая или графическая капча (Normal)

Для решения обычных капч с изображениями используется метод normal. Изображение можно передать в виде пути к локальному файлу.

php Copy
try {
    $result = $solver->normal('/path/to/captcha.jpg');
    echo "Распознанный текст: " . $result->code;
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}

Полный список поддерживаемых типов капч

На данный момент сервис 2Captcha поддерживает следующие основные типы капч: Normal (ImageToTextTask), reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, GeeTest v3 и v4, FunCaptcha (Arkose Labs), KeyCaptcha, Capy Puzzle, Lemin, Yidun (NECaptcha), Amazon WAF, MTCaptcha, CutCaptcha, Tencent, DataDome, CyberSiARA, Coordinates, Rotate и Canvas.

Для каждого из этих типов в API предусмотрен свой уникальный метод и набор специфических настроек.

Дополнительные настройки

Работа через прокси

Если целевой сайт строго проверяет IP-адреса и привязывает капчу к конкретному прокси, вы можете передать параметры прокси непосредственно в массив настроек метода решения.

php Copy
try {
    $result = $solver->recaptcha([
        'sitekey'     => '6LeTxvsqAAAAAK...',
        'url'         => 'https://example.com/login',
        'proxy'       => 'login:password@198.51.100.10:8080',
        'proxytype'   => 'HTTP'
    ]);
    echo "Токен: " . $result->code;
} catch (\Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}

Настройка таймаутов

По умолчанию библиотека ожидает решения капчи 120 секунд, а интервал между запросами статуса составляет 10 секунд. Эти параметры можно переопределить через свойства объекта.

php Copy
$solver->defaultTimeout = 300;  // Максимальное время ожидания в секундах
$solver->pollingInterval = 15;  // Интервал между запросами статуса в секундах

Обработка ошибок

При возникновении ошибок библиотека выбрасывает стандартные исключения PHP (\Exception), сообщение которых содержит код и описание ошибки от API. Это позволяет легко перехватывать и логировать проблемы.

php Copy
try {
    $result = $solver->recaptcha([
        'sitekey' => '6LeTxvsqAAAAAK...',
        'url'     => 'https://example.com/login'
    ]);
    echo "Капча успешно решена: " . $result->code;
} catch (\Exception $e) {
    // Логирование ошибки или отправка уведомления
    error_log("Ошибка решения капчи: " . $e->getMessage());
    
    // Можно проверить конкретный код ошибки
    if ($e->getMessage() === 'ERROR_ZERO_BALANCE') {
        // Действия при нулевом балансе
    }
}

Частые коды ошибок

При возникновении исключений библиотека транслирует коды ошибок API в понятные сообщения. Основные из них представлены в таблице:

Код ошибки Описание Рекомендация
ERROR_WRONG_USER_KEY Неверный формат или значение API-ключа Проверьте правильность ключа в конфигурации
ERROR_ZERO_BALANCE Недостаточно средств на балансе Пополните счет в личном кабинете 2Captcha
ERROR_NO_SLOT_AVAILABLE Нет свободных воркеров Повторите попытку через 10–15 секунд
ERROR_BAD_PARAMETERS Не переданы обязательные параметры Проверьте соответствие параметров документации
ERROR_PROXY_CONNECT_REFUSED Не удалось подключиться к прокси Проверьте доступность и формат строки прокси
ERROR_CAPTCHA_UNSOLVABLE Капча не была решена Средства возвращаются, попробуйте обновить капчу

Отчеты о правильности решения

Для поддержания высокого качества распознавания и возврата средств за неверные решения, используйте методы отправки отчетов.

php Copy
// Если сайт принял токен и форма успешно отправилась
$solver->reportCorrect($result->taskId);

// Если сайт отклонил токен с ошибкой валидации
$solver->reportIncorrect($result->taskId);

Полезные ссылки

Заключение

PHP-библиотека для 2Captcha берет на себя всю рутинную работу по взаимодействию с API: она скрывает циклы опроса, валидирует входные параметры и возвращает готовые токены или распознанный текст. Благодаря чистому и объектно-ориентированному синтаксису, она легко встраивается как в консольные утилиты, так и в веб-приложения на популярных фреймворках.

Сервис поддерживает более 20 различных типов капч, от простых текстовых до сложных поведенческих систем вроде DataDome и Amazon WAF. Это значит, что какой бы вид защиты вы ни встретили на своем пути, у вас всегда будет рабочий инструмент для её обхода.

Для начала работы достаточно установить пакет через Composer, инициализировать клиент с вашим API-ключом и вызвать нужный метод. При необходимости вы можете легко добавить поддержку прокси или настроить таймауты под специфику вашего проекта.