Пишем простой авторегистратор. Часть 4 - подключаем антикапчу.

Содержание

  1. Инструментарий
  2. Основы
  3. Боремся с капчей
  4. Подключаем антикапчу
  5. Подтверждение по email
  6. Пишем модуль для RegSubmitter

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

Что из себя представляет антикапча?

Антикапча - это сервис по ручному распознаванию капчи. Иными словами, сотни китайцев школьников сидят и за копейки распознают капчу, которые им подсовывают. Я не представляю, где они находят столько дураков, готовых за $1 распознавать 1000 капч, но меня это и не волнует.

Механизм работы сервиса простой:

  1. Вы отправляете картинку на сервис и она встает в очередь на прием к обезьянкам.
  2. Раз в 5 секунд вы запрашиваете статус картинки.
  3. Если картинка не распозналась, ждете еще 5 секунд. Если ожидание затянулось - значит не судьба, спустя некоторое время картинка выпадает.
  4. Если картинка распозналась, то вы получаете текст, который по мнению обезьянки на ней написан.

На счет мнения обезьянки надо сказать отдельно. Среди них попадаются откровенные халтурщики, которые вводят заведомую херню. Поэтому чтобы минимизировать шанс нарваться на такую сволочь, надо в запросе на добавление картинки максимально точно описать параметры текста.

Техническая сторона.

Антикапча предоставляет несложный 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. Завтра сделаю автоматическую выдачу инвайтов, дабы не тормозить очередь Smile

UPD2. Сделал.

В следующем выпуске...

... вы узнаете, как подтвердить регистрацию по почте.

PS. Lunatica - Out!



Trackback URL for this post:

http://nevkontakte.org.ru/trackback/371
Прикрепленный файлРазмер
moemesto_ac.zip3.38 кб
Дмитрий вт, 08/12/2009 - 22:54

Спасибо.Ждем продолжения

Горный Оптимизатор чт, 10/12/2009 - 02:26

Про обезьянок прикольно написал Smile)

Самое прикольное что я их видел :Р

Alek$ чт, 10/12/2009 - 20:02

Не сфотал? А то дюже посмотреть охота Wink

Любитель чт, 10/12/2009 - 06:36

А на заказ простой авторегистратор с анти капчей сделаете?

Alek$ чт, 10/12/2009 - 20:04

Пишите на email, обсудим.

Любитель пт, 11/12/2009 - 04:37

Отправил свои пожелания Smile

Alek$ пт, 11/12/2009 - 23:48

Ответил

Alek$ сб, 12/12/2009 - 01:03

Сделал автоматическую выдачу инвайтов на антикапчу - наслаждайтесь!

Илларион вт, 23/02/2010 - 22:42

Помниться мне, как я сам работал на такой программе, где надо было за 10 сек распознать капчу... Это были первые месяцы моего прибывания в Сети Smile

Alek$ вт, 23/02/2010 - 22:49

Меня бог миловал Smile Когда у меня появился достаточно быстрый интернет, я уже достаточно хорошо умел программировать, чтобы заняться созданием сайтов. Правда, те поделки сейчас у меня вызывают смех и слезы Laughing out loud

Frost пн, 01/03/2010 - 23:45

Здравствуйте! Подключаю антикаптчу, вроде все правильно, но выдает CURL returned error: failed creating formpost data, раньше когда тоже пытался отправить курлом картинку ничего не выходило, прописывал как '@'.$file но по ходу дела он както не правильно слал. В чем может быть моя ошибка? У меня сборка PHP того что с денвером идет, а файл библиотеки curl просто добавлен с 5го PHP в папку, но при этом обычные запросы без вложенного файла шлются нормально.

Alek$ пн, 01/03/2010 - 23:51

У меня такой ошибки не возникало, единственное, что могу сказать, что у php-версии curl как минимум раньше были какие-то проблемы с отправкой файлов. Есть ли они сейчас - не знаю. Могу еще посоветовать включить в curl verbose и debug режимы.

Frost вт, 02/03/2010 - 00:36

Вообщем проблема на половину решена. Для тех кто использует 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 у них заблокирован.



Отправить комментарий

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <b> <s> <u> <p> <h3> <br> <strike> <sup> <pre> <h4> <hr>
  • Строки и параграфы переносятся автоматически.
  • You may use [inline:xx] tags to display uploaded files or images inline.
  • Текстовые смайлы будут заменены на графические.
CAPTCHA
Вы точно не бот?
8 + 3 =
Without JavaScript you won't pass captcha test, sorry. Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.