Эта статья была полезной?
Как обойти капчу с помощью PHP
Технический специалист
Введение
При разработке веб-скраперов, автоматизации тестирования или создании ботов на PHP разработчики часто сталкиваются с необходимостью обхода капчи. Написание собственных cURL-запросов, реализация циклов опроса и обработка таймаутов усложняют код и отвлекают от основной бизнес-логики.
В этом руководстве мы рассмотрим, как использовать официальную PHP-библиотеку для интеграции с API 2Captcha. Мы разберем процесс установки, инициализацию клиента, решение Capy Puzzle и других популярных типов капч, а также составим полный список всех поддерживаемых сервисом типов защиты.
Установка и подключение
Библиотека распространяется через Composer и легко интегрируется в любые PHP-проекты, от простых скриптов до крупных приложений на фреймворках вроде Laravel или Symfony.
Установить пакет можно с помощью следующей команды в терминале:
bash
composer require 2captcha/2captcha
После установки подключите автозагрузчик Composer в вашем скрипте и импортируйте основной класс:
php
require __DIR__ . '/vendor/autoload.php';
use TwoCaptcha\TwoCaptcha;
Инициализация клиента
Для начала работы необходимо создать экземпляр класса TwoCaptcha, передав ему ваш API-ключ. В целях безопасности рекомендуется хранить ключ в переменных окружения или конфигурационных файлах, а не в исходном коде.
php
$apiKey = getenv('CAPTCHA_API_KEY');
$solver = new TwoCaptcha($apiKey);
Решение Capy Puzzle
Capy Puzzle — это интерактивная капча, где пользователю нужно собрать пазл или переместить элемент в нужную позицию. Для её решения через API необходимо передать websiteKey (уникальный ключ капчи) и URL страницы.
php
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
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
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
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
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
$solver->defaultTimeout = 300; // Максимальное время ожидания в секундах
$solver->pollingInterval = 15; // Интервал между запросами статуса в секундах
Обработка ошибок
При возникновении ошибок библиотека выбрасывает стандартные исключения PHP (\Exception), сообщение которых содержит код и описание ошибки от API. Это позволяет легко перехватывать и логировать проблемы.
php
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
// Если сайт принял токен и форма успешно отправилась
$solver->reportCorrect($result->taskId);
// Если сайт отклонил токен с ошибкой валидации
$solver->reportIncorrect($result->taskId);
Полезные ссылки
- Исходный код и документация библиотеки: https://github.com/2captcha/2captcha-php
- Примеры использования: https://github.com/2captcha/2captcha-php/tree/main/examples
- Полная документация API 2Captcha: https://rucaptcha.com/api-docs
- Центр поддержки: https://rucaptcha.com/support/tickets/new
Заключение
PHP-библиотека для 2Captcha берет на себя всю рутинную работу по взаимодействию с API: она скрывает циклы опроса, валидирует входные параметры и возвращает готовые токены или распознанный текст. Благодаря чистому и объектно-ориентированному синтаксису, она легко встраивается как в консольные утилиты, так и в веб-приложения на популярных фреймворках.
Сервис поддерживает более 20 различных типов капч, от простых текстовых до сложных поведенческих систем вроде DataDome и Amazon WAF. Это значит, что какой бы вид защиты вы ни встретили на своем пути, у вас всегда будет рабочий инструмент для её обхода.
Для начала работы достаточно установить пакет через Composer, инициализировать клиент с вашим API-ключом и вызвать нужный метод. При необходимости вы можете легко добавить поддержку прокси или настроить таймауты под специфику вашего проекта.