В прошлой статье я писал о том, как бороться с капчей в формах регистрации. Однако тогда мы были вынуждены вводить ее руками. Сегодня я расскажу, как можно переложить эту работу на специально обученных обезьянок сервис антикапча.
Антикапча - это сервис по ручному распознаванию капчи. Иными словами, сотни китайцев школьников сидят и за копейки распознают капчу, которые им подсовывают. Я не представляю, где они находят столько дураков, готовых за $1 распознавать 1000 капч, но меня это и не волнует.
Механизм работы сервиса простой:
На счет мнения обезьянки надо сказать отдельно. Среди них попадаются откровенные халтурщики, которые вводят заведомую херню. Поэтому чтобы минимизировать шанс нарваться на такую сволочь, надо в запросе на добавление картинки максимально точно описать параметры текста.
Антикапча предоставляет несложный API для взаимодействия с ней, однако уже написаны функции для PHP, Python, C++, Perl, C#, Delphi и даже VB и Asm, чем мы и будем пользоваться. В нашем случае, я воспользуюсь PHP-версией с curl. В архив я включил слегка измененную для более удобного вывода процесса версию этого скрипта, но с тем же успехом можно работать и с оригинальным.
Регистрация на этом сервисе требует инвайта. К сожалению, эти хитрецы не позволяют иметь больше одного не активированного инвайта, поэтому я публикую здесь только один: a9bcd1d903 45914dfa51. Кому надо еще - пишите на почту Теперь инвайты на антикапчу можно получить в автоматическом режиме.
. (См. UPD1 в конце поста)
Он мало чем отличается от того, что я публиковал в прошлый раз. все изменения сосредоточены в части, управляющей процессом регистрации. Сами функции, отправляющие запросы на регистрацию, остались прежними.
<?php 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('#<input type=hidden name="captchaid" value="([a-f0-9]+)">#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 = 'antifrag233@yopmail.com'; $password = 'qwerty'; // Выводим, что мы будем регать echo "Логин: $login, пароль: $password, email: $email<br/>"; // Получаем капчу и сессионный ключ $key = register1(); // Подключаем апи антикапчи require('ac_curl.php'); // Распознаем капчу. Список и значение параметров функции можно узнать в начале файла. // Чем точнее параметры будут описывать капчу, тем больше точность распознавания $captcha=recognize("captcha.jpg","ваш_api_key",true, 5 120, 0, 0, 1, 4, 6); // На всякий случай показываем картинку и распознанный текст echo '<img src="captcha.jpg"><br>Text:'.$captcha.'<br>'; // Регаем if(register2($login, $email, $password, $captcha, $key)) { echo 'Успешно зарегистрирован'; } else { echo '<b>Ошибка регистрации</b>'; } echo '<br><a href="'.basename(__FILE__).'">Еще раз</a>'; // Все! ;-) ?>
Обратите внимание, что "ваш_api_key" надо заменить на нормальный api key, который есть в панели антикапчи, в разделе настройки. напомню, что в скрипте умышленно допущена пара синтаксических ошибок, чтобы отсеять все тех же обезьянок.
Во вложении - архив с самом скриптом и модифицированной библиотекой работы с антикапчей.
UPD1. Завтра сделаю автоматическую выдачу инвайтов, дабы не тормозить очередь 
UPD2. Сделал.
... вы узнаете, как подтвердить регистрацию по почте.
| Прикрепленный файл | Размер |
|---|---|
| moemesto_ac.zip | 3.38 кб |
Спасибо.Ждем продолжения
Про обезьянок прикольно написал
)
Самое прикольное что я их видел :Р
Не сфотал? А то дюже посмотреть охота
А на заказ простой авторегистратор с анти капчей сделаете?
Пишите на email, обсудим.
Отправил свои пожелания
Ответил
Сделал автоматическую выдачу инвайтов на антикапчу - наслаждайтесь!
Помниться мне, как я сам работал на такой программе, где надо было за 10 сек распознать капчу... Это были первые месяцы моего прибывания в Сети
Меня бог миловал
Когда у меня появился достаточно быстрый интернет, я уже достаточно хорошо умел программировать, чтобы заняться созданием сайтов. Правда, те поделки сейчас у меня вызывают смех и слезы 
Здравствуйте! Подключаю антикаптчу, вроде все правильно, но выдает 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://www.anti-captcha.com/in.php у них заблокирован.
Отправить комментарий