Пишем простой авторегистратор. Часть 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 в конце поста) Теперь инвайты на антикапчу можно получить в автоматическом режиме.

Пишем код.

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


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. Сделал.

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

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

PS. Lunatica - Out!



Trackback URL for this post:

/trackback/371
Прикрепленный файл Размер
moemesto_ac.zip 3.38 кб
Дмитрий вт, 08/12/2019 - 22:54

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответил

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

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

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

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

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

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

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

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

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

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

Frost вт, 02/03/2020 - 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://anti-captcha.com/in.php у них заблокирован.

Harmon Pugh пн, 19/04/2020 - 19:59

Вот такая же фигня, как в последнем посте. Объясните, что делать-то? Второй день уже ломаю мозг.

Alek$ пн, 19/04/2020 - 20:40

ERROR_CONTACT_SUPPORT в переводе с онглицкаво означает "Ошибка - свяжитесь с техподдержкой"

Fktrctq пн, 19/07/2020 - 05:09

Привет!
Раскажите пожалуйста по поводу "ваш_api_key" по подробней, немогу понять какой api_key надо
(Обратите внимание, что "ваш_api_key" надо заменить на нормальный api key, который есть в панели антикапчи) по подробней, немогу понять какой api_key надо

Alek$ пн, 19/07/2020 - 19:33

api_key вы найдете в своей панели на antigate.com

Alexei пн, 19/07/2020 - 21:33

Не могли бы ва по подробней написать о api_key
1) на странице регистрации antigate.com требую код приглашения- где его брать?
2) Получается картинку распознает сервер с antigate.com по api_key а не сам скрипт ac_curl.php ?

alexei чт, 22/07/2020 - 03:08

Ну может ктото подскажет? Помогите разобраться!!

Alexei пн, 19/07/2020 - 17:33

Не могли бы ва по подробней написать о api_key
1) на странице регистрации antigate.com требую код приглашения- где его брать?
2) Получается картинку распознает сервер с antigate.com по api_key а не сам скрипт ac_curl.php ?

Alek$ пт, 23/07/2020 - 09:51

1) Инвайты легко нагуглить. У меня на блоге есть страничка с инвайтами, но она что-то сломалась а починить некогда.
2) Да.

Гость пт, 03/09/2020 - 03:16

В связи с изменениями инвайтов на Antigete - стали платными -
предлагаю Вам инвайты для регистрации на сайте anticapcha
(http://antigate.com) совершенно бесплатно.
Аккаунты идут с возможностью бесплатной загрузки 10 тестовых капч.

5df5738bb9
9e1579d130
e622088e30
adcbf3898b
ea4cfdf17f
a6c12201c8
94bc0adae3
148ec37a9e
a8d835289a

AIvPetrov ср, 18/08/2020 - 19:17

Что-то не работает, или я что-то не так делаю...

Alek$ пт, 20/08/2020 - 10:58

Зависит от того, что вы делаете.

Denis пт, 03/09/2020 - 03:15

В связи с изменениями инвайтов на Antigete - стали платными -
предлагаю Вам инвайты для регистрации на сайте anticapcha
(http://antigate.com) совершенно бесплатно.
Аккаунты идут с возможностью бесплатной загрузки 10 тестовых капч.

5df5738bb9
9e1579d130
e622088e30
adcbf3898b
ea4cfdf17f
a6c12201c8
94bc0adae3
148ec37a9e
a8d835289a

Гость пн, 09/01/2022 - 18:04

У кого скрипт не работает пропишите в строке
$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);



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

CAPTCHA
Вы точно не бот?
2 + 2 =
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.