Looking for international version of our service? Go to 2captcha.com

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

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

Как использовать `strtoupper` с 2captcha для обхода текстовых капч

Мэттью Моди

Инженер технической поддержки

Введение

При работе с сервисом 2captcha для распознавания простых капч (normal или textcaptcha) часто возникает ситуация: воркер возвращает ответ в который не соответствует заранее известному регистру, а целевой сайт требует строгого формата. Функция strtoupper() (или mb_strtoupper() для UTF-8) позволяет нормализовать ответ перед отправкой в форму. Ниже пошаговый алгоритм интеграции.

Шаг 1. Настройте параметр regsense в запросе к 2captcha

По умолчанию 2captcha использует case-sensitive распознавание (regsense=1). Если ваш целевой сайт не требует точного соответствия регистра, отправляйте запрос с regsense=0. Это даёт следующие преимущества:

  • Ускоряет обработку задачи воркерами.
  • Снижает процент возвратов на доработку.
  • Позволяет вам самостоятельно привести результат к нужному виду на выходе.

Пример отправки задачи (PHP cURL):

Copy
$params = [
    'key'           => 'YOUR_2CAPTCHA_KEY',
    'method'        => 'normal',
    'body'          => base64_encode($captchaImage),
    'regsense'      => 0,
    'languagepool'  => 'ru', // Направит задачу исполнителям, знающим нужный алфавит
    'json'          => 1
];

$ch = curl_init('https://2captcha.com/in.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
$taskId = $response['request'] ?? null;
curl_close($ch);

Шаг 2. Получите ответ и примените нормализацию

После получения статуса OK от res.php вы получите строку ответа. Обратите внимание: если в in.php вы использовали json=1, то в запросе к res.php этот параметр тоже нужно передать явно, иначе сервис вернёт формат OK|ответ. Опрос результата лучше делать с интервалом 5–10 секунд до получения готового ответа.

Пример обработки ответа:

Copy
$answer = trim($captchaResultFrom2captcha);
// Для латиницы достаточно strtoupper(), для кириллицы/UTF-8 обязательно mb_strtoupper()
$normalized = mb_strtoupper($answer, 'UTF-8');

Шаг 3. Встройте нормализацию в отправку формы

Используйте $normalized как значение поля капчи в POST/GET запросе к целевому сайту.

Шаг 4. Учитывайте особенности приведения регистра в разных языках

Стандартная strtoupper() в PHP игнорирует символы за пределами ASCII. При работе с многоязычными капчами важно выбирать правильную функцию в зависимости от языка программирования и кодировки.

Сравнение функций приведения к верхнему регистру

Язык Функция/Метод Особенности
PHP strtoupper($text) Только ASCII, латиница
PHP mb_strtoupper($text, 'UTF-8') Кириллица, Юникод, требуется mbstring
Python text.upper() Работает с Юникодом из коробки
C# text.ToUpper() Базовая версия
C# text.ToUpper(CultureInfo) С указанием локали
Ruby text.upcase Базовая версия
Ruby text.upcase(:unicode) Для Unicode символов
JavaScript text.toUpperCase() Работает с большинством символов
Java text.toUpperCase() Базовая версия
Java text.toUpperCase(Locale) С указанием локали

Ключевые рекомендации:

  • PHP: Всегда используйте mb_strtoupper($text, 'UTF-8') для капч с кириллицей или смешанным алфавитом. Убедитесь, что расширение mbstring включено в php.ini.
  • Python/JavaScript: Методы .upper() и .toUpperCase() работают с Юникодом по умолчанию, но могут иметь нюансы с некоторыми спецсимволами (например, немецкая ß → SS в Python).
  • C#/Java: При работе с интернациональными капчами указывайте локаль (CultureInfo.InvariantCulture или Locale.ENGLISH), чтобы избежать неожиданных преобразований.
  • Ruby: Для полной поддержки Юникода используйте upcase(:unicode).

Шаг 5. Тестирование и логирование

Добавьте простую проверку: сравнивайте $answer и $normalized. Если они отличаются, записывайте в лог. Это поможет отловить сайты, которые всё-таки чувствительны к регистру, несмотря на ваши ожидания.

Итоговый чек-лист перед запуском

  • На целевом сайте проверена регистронезависимость.
  • В запросе к 2captcha установлен regsense=0.
  • Для многоязычных капч добавлен languagepool.
  • В коде используется mb_strtoupper($text, 'UTF-8').
  • Ответ проходит trim() до применения strtoupper.
  • Настроено логирование расхождений регистров.
  • Проведён тест на 30–50 реальных капчах.