
В прошлой статье я писал о том, как бороться с капчей в формах регистрации. Однако тогда мы были вынуждены вводить ее руками. Сегодня я расскажу, как можно переложить эту работу на специально обученных обезьянок сервис антикапча.
Антикапча - это сервис по ручному распознаванию капчи. Иными словами, сотни китайцев школьников сидят и за копейки распознают капчу, которые им подсовывают. Я не представляю, где они находят столько дураков, готовых за $1 распознавать 1000 капч, но меня это и не волнует.
Механизм работы сервиса простой:
На счет мнения обезьянки надо сказать отдельно. Среди них попадаются откровенные халтурщики, которые вводят заведомую херню. Поэтому чтобы минимизировать шанс нарваться на такую сволочь, надо в запросе на добавление картинки максимально точно описать параметры текста.
Антикапча предоставляет несложный API для взаимодействия с ней, однако уже написаны функции для PHP, Python, C++, Perl, C#, Delphi и даже VB и Asm, чем мы и будем пользоваться. В нашем случае, я воспользуюсь PHP-версией с curl. В архив я включил слегка измененную для более удобного вывода процесса версию этого скрипта, но с тем же успехом можно работать и с оригинальным.
Регистрация на этом сервисе требует инвайта. К сожалению, эти хитрецы не позволяют иметь больше одного не активированного инвайта, поэтому я публикую здесь только один: a9bcd1d903 45914dfa51. Кому надо еще - пишите на почту Теперь инвайты на антикапчу можно получить в автоматическом режиме.. (См. UPD1 в конце поста)
Он мало чем отличается от того, что я публиковал в прошлый раз. все изменения сосредоточены в части, управляющей процессом регистрации. Сами функции, отправляющие запросы на регистрацию, остались прежними.
header('Content-Type: text/html; charset=UTF-8'); function register1() { // Особая, curl-ная магия $ch = curl_init(); // Инициализируем сессию curl_setopt($ch, CURLOPT_URL,"http://moemesto.ru/register/"); // задаем адрес формы curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Результат нам нужно вернуть в переменную, а не на экран curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Переходить по редиректам curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Указываем файл для хранения кукисов // Выполняем запрос $result = curl_exec($ch); // При помощи простейшего регулярного выражения добываем сессионный ключ preg_match('##i', $result, $key); curl_setopt($ch, CURLOPT_URL,"http://moemesto.ru/captcha/$key[1]"); // задаем адрес картинки $result = curl_exec($ch); // Скачиваем картинку curl_close ($ch); // Закрываем сессию file_put_contents('captcha.jpg', $result); // Сохраняем return $key[1]; // Возвращаем добытый ключ } // Функция, производящая регистрацию function register2($login, $email, $password, $captcha, $key) { // Все POST-параметры, которые надо отправить $post = array( 'captchaid' => $key // Передаем сессионный ключ 'login' => $login, // Логин 'email' => $email, // Емейл 'password' => $password, // Пароль 'captcha' => $captcha, // А это наш код с картинки 'do_reg' => 'Зарегистрироваться', // "Нажимаем" кнопку отправить ;-) ); // Особая, curl-ная магия $ch = curl_init(); // Инициализируем сессию curl_setopt($ch, CURLOPT_URL,"http://moemesto.ru/register/"); // задаем адрес обработчика формы curl_setopt($ch, CURLOPT_POST, 1); // Указываем, что нам нужно отправить POST-запрос curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Передаем POST-параметры curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Результат нам нужно вернуть в переменную, а не на экран curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Переходить по редиректам curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Указываем файл для хранения кукисов. При чем он должен быть тот же, что и в прошлый раз, чтобы кукисы подхватились. // Запускаем запрос! $result = curl_exec($ch); curl_close ($ch); // Закрываем сессию // Проверяем на успешность регистрации //echo $result; if(strstr($result, 'Поздравляем! Вы успешно зарегистрировались!')) { return true; } else { return false; } } // Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение. $login = 'antifrager323'; $email = '[email protected]'; $password = 'qwerty'; // Выводим, что мы будем регать echo "Логин: $login, пароль: $password, email: $email
"; // Получаем капчу и сессионный ключ $key = register1(); // Подключаем апи антикапчи require('ac_curl.php'); // Распознаем капчу. Список и значение параметров функции можно узнать в начале файла. // Чем точнее параметры будут описывать капчу, тем больше точность распознавания $captcha=recognize("captcha.jpg","ваш_api_key",true, 5 120, 0, 0, 1, 4, 6); // На всякий случай показываем картинку и распознанный текст echo '
Text:'.$captcha.'
'; // Регаем if(register2($login, $email, $password, $captcha, $key)) { echo 'Успешно зарегистрирован'; } else { echo 'Ошибка регистрации'; } echo '
basename(__FILE__).'">Еще раз'; // Все! ;-) ?>
Обратите внимание, что "ваш_api_key" надо заменить на нормальный api key, который есть в панели антикапчи, в разделе настройки. напомню, что в скрипте умышленно допущена пара синтаксических ошибок, чтобы отсеять все тех же обезьянок.
Во вложении - архив с самом скриптом и модифицированной библиотекой работы с антикапчей.
UPD1. Завтра сделаю автоматическую выдачу инвайтов, дабы не тормозить очередь :)
UPD2. Сделал.
... вы узнаете, как подтвердить регистрацию по почте.
Прикрепленный файл | Размер |
---|---|
moemesto_ac.zip | 3.38 кб |
Спасибо.Ждем продолжения
Про обезьянок прикольно написал :))
Самое прикольное что я их видел :Р
Не сфотал? А то дюже посмотреть охота ;)
А на заказ простой авторегистратор с анти капчей сделаете?
Пишите на email, обсудим.
Отправил свои пожелания :)
Ответил
Сделал автоматическую выдачу инвайтов на антикапчу - наслаждайтесь!
Помниться мне, как я сам работал на такой программе, где надо было за 10 сек распознать капчу... Это были первые месяцы моего прибывания в Сети :-)
Меня бог миловал :) Когда у меня появился достаточно быстрый интернет, я уже достаточно хорошо умел программировать, чтобы заняться созданием сайтов. Правда, те поделки сейчас у меня вызывают смех и слезы :D
Здравствуйте! Подключаю антикаптчу, вроде все правильно, но выдает CURL returned error: failed creating formpost data, раньше когда тоже пытался отправить курлом картинку ничего не выходило, прописывал как '@'.$file но по ходу дела он както не правильно слал. В чем может быть моя ошибка? У меня сборка PHP того что с денвером идет, а файл библиотеки curl просто добавлен с 5го PHP в папку, но при этом обычные запросы без вложенного файла шлются нормально.
У меня такой ошибки не возникало, единственное, что могу сказать, что у php-версии curl как минимум раньше были какие-то проблемы с отправкой файлов. Есть ли они сейчас - не знаю. Могу еще посоветовать включить в curl verbose и debug режимы.
Вообщем проблема на половину решена. Для тех кто использует denwer то нужно писать путь к файлу с обратными слешами, такими как в винде, ну и прописывать их так C:\\folder\\file.jpg.
Вторая половина проблемы возникла:
captcha sent, got captcha ID 132223216
waiting for 5 seconds
server returned error: ERROR_CONTACT_SUPPORT
Ждет 5 сек и выдает такую ошибку, причем на antigate.com нужно уже прописывать этот домен http://antigate.com/in.php так как старый http://anti-captcha.com/in.php у них заблокирован.
Вот такая же фигня, как в последнем посте. Объясните, что делать-то? Второй день уже ломаю мозг.
ERROR_CONTACT_SUPPORT в переводе с онглицкаво означает "Ошибка - свяжитесь с техподдержкой"
Привет!
Раскажите пожалуйста по поводу "ваш_api_key" по подробней, немогу понять какой api_key надо
(Обратите внимание, что "ваш_api_key" надо заменить на нормальный api key, который есть в панели антикапчи) по подробней, немогу понять какой api_key надо
api_key вы найдете в своей панели на antigate.com
Не могли бы ва по подробней написать о api_key
1) на странице регистрации antigate.com требую код приглашения- где его брать?
2) Получается картинку распознает сервер с antigate.com по api_key а не сам скрипт ac_curl.php ?
Ну может ктото подскажет? Помогите разобраться!!
Alexei пн, 19/07/2020 - 17:33
Не могли бы ва по подробней написать о api_key
1) на странице регистрации antigate.com требую код приглашения- где его брать?
2) Получается картинку распознает сервер с antigate.com по api_key а не сам скрипт ac_curl.php ?
1) Инвайты легко нагуглить. У меня на блоге есть страничка с инвайтами, но она что-то сломалась а починить некогда.
2) Да.
В связи с изменениями инвайтов на Antigete - стали платными -
предлагаю Вам инвайты для регистрации на сайте anticapcha
(http://antigate.com) совершенно бесплатно.
Аккаунты идут с возможностью бесплатной загрузки 10 тестовых капч.
5df5738bb9
9e1579d130
e622088e30
adcbf3898b
ea4cfdf17f
a6c12201c8
94bc0adae3
148ec37a9e
a8d835289a
Что-то не работает, или я что-то не так делаю...
Зависит от того, что вы делаете.
В связи с изменениями инвайтов на Antigete - стали платными -
предлагаю Вам инвайты для регистрации на сайте anticapcha
(http://antigate.com) совершенно бесплатно.
Аккаунты идут с возможностью бесплатной загрузки 10 тестовых капч.
5df5738bb9
9e1579d130
e622088e30
adcbf3898b
ea4cfdf17f
a6c12201c8
94bc0adae3
148ec37a9e
a8d835289a
У кого скрипт не работает пропишите в строке
$captcha=recognize("captcha.jpg","ваш_api_key",true, 5 120, 0, 0, 1, 4, 6); полный путь к капче т.е.
$captcha=recognize($_SERVER['DOCUMENT_ROOT']."/captcha.jpg","ваш_api_key",true, 5 120, 0, 0, 1, 4, 6);
Отправить комментарий