Пишем простой авторегистратор. Часть 2 - основы.

Содержание

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

Сначала рекомендую прочитать часть 1 - инструментарий.

В этой части я расскажу основные методы анализа форм регистрации и приведу пример написания простого регистратора для сервиса без капчи. Подопытным будет сервис закладок toodoo.ru :)

Анализ формы. Способ первый.

В прошлый раз я говорил, что нам понадобится Firefox и расширение Web Developer. Говорил я это не от скуки, а потому что это действительно облегчит жизнь. Этот способ анализа самый простой и наглядный, и его обычно более, чем достаточно.

Теперь действует просто: заходим на страницу регистрации, в панели Web Developer выбираем Формы → Информация о формах. В открывшейся вкладке мы получим детальное описание всех имеющихся форм на странице.

Определить нужную довольно легко по адресу скрипта-обработчика (поле "Действие" в таблице), по id или по именам полей.

Из этой таблицы нам понадобится список полей формы и их значения по умолчанию. Так же стоит сразу запомнить поля логина, емейла и пароля, они нам понадобятся при написании регистратора :)

Кроме того, если и более визуальный способ - Формы → Показать параметры форм:

Анализ формы. Способ второй.

На этот раз мы прибегнем к помощи еще более мощного инструмента - FireBug. Это инструмент воистину убийственной мощи и нужен он в основном для отлова всяких JavaScript'овых защит, добавляющих дополнительные поля, меняющих значения или посылающих дополнительные запросы. Из личного опыта скажу, что такое встречается очень не часто. По-настоящему необходим он был всего один раз, зато оправдал себя на все 100%.

Действуем так:

  1. Заходим на страницу регистрации, заполняем форму так, чтобы было понятно, что и куда вы ввели (то есть, писать одинаковый текст типа qwe" не стоит - запутаетесь, какое поле за что отвечает)
  2. Активируем панель FireBug, выбираем вкладку "Сеть" (Net) активируем ее.
  3. Отправляем форму.
  4. Смотрим на панель FireBug. Первый из перечисленный запросов - наш. Наведение курсора на его заголовок покажет полный адрес с GET-параметрами. Чтобы посмотреть POST-параметры, надо развернуть запрос и открыть вкладку "Post".

 

Анализ формы. Способ третий, для настоящих мужчин.

Вид → Исходный код страницы. И вкуриваем до просветления :) На самом деле, способ тоже ничего так себе, но два предыдущих удобнее. Зато это можно делать хоть в IE.

Пишем регистратор.

Ниже я привожу подробно откомментированный код авторегистратора для toodoo.ru. В нем умышленно допущена пара простых синтаксических ошибок, чтобы кто попало не злоупотреблял им ;) Для того, чтобы их исправить, достаточно базовых знаний PHP.


// Функция, производящая регистрацию
function register($login, $email, $password)
{
 // Все POST-параметры, которые надо отправить
 $post = array(
  'agree' => 1, // Да, мы согласны с правилами ;-)
  'profile_is_female' => 0, // Укажем пол
  'profile_nick_name' => $login, // Наш логин
  'user_email' => $email, // email
  'user_password' => $password // пароль
  'user_password_repeat' => $password,// повторим пароль
 );
 // Особая, curl-ная магия
 $ch = curl_init(); // Инициализируем сессию
 curl_setopt($ch, CURLOPT_URL,"http://toodoo.ru/account/signup"); // задаем адрес обработчика формы
 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); // Переходить по редиректам
 // Генерируем временный файл для cookies, чтобы они не терялись между запросами-редиректами
 $temp = tempnam('.', '__');
 curl_setopt($ch, CURLOPT_COOKIEJAR, $temp);
 unlink($temp);
 // Запускаем запрос!
 $result = curl_exec($ch);
 curl_close ($ch); // Закрываем сессию
 // Проверяем на успешность регистрации
 if(strstr($result, 'Поздравляем, ты успешно зарегистрировался в toodoo!'))
 {
  return true;
 }
 else
 {
  return false;
 }
}
// Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение.
$login = 'Dummy';
$email = '[email protected]';
$password = 'qwerty';
// Выводим, что мы будем регать
echo "Логин: $login, пароль: $password, email: $email
"
; // Регаем if(register($login, $email, $password)) { echo 'Успешно зарегистрирован'; } else { echo 'Ошибка регистрации'; // Все! ;-) ?>

Тот же самый код вы можете скачать во вложении.

Кроме того, есть один тонкий момент: файл должен быть сохранен в той же кодировке, что и подопытный сайт, поскольку мы проверяем успешность регистрации, ища кириллическую подстроку. Если сохранить в неправильной кодировке, то она никогда не найдется и все время будет выводиться ошибка. В случае с toodoo.ru - это UTF-8.

В следующей статье...

...будем учиться учимся бороться с капчей.

PS. Sonata Arctica - World In My Eyes (Depeche Mode cover)



Trackback URL for this post:

/trackback/367
Прикрепленный файл Размер
toodoo.php 2.38 кб
justrussian пн, 23/11/2019 - 00:53

А без curl сложно это сделать? И еще хотелось бы про прокси узнать, где их берут, и как юзаются они в скриптах, но это наверное часть 4-5? =) Однако спасибо...

Alek$ пн, 23/11/2019 - 21:49

curl - самый простой вариант, потому что необходимо отправлять POST запросы. Можно, конечно, делать напрямую через fsockopen, но это в разы геморнее.

Про то, как юзать прокси я напишу, это просто :) Ну а где брать - лично дело каждого.

Гость пн, 01/03/2020 - 04:16

Покажите реализацию с проксями, пожалуйста.

Alek$ пн, 01/03/2020 - 21:42

Используйте curl_setopt() С параметрами CURLOPT_PROXY и CURLOPT_PROXYPORT

Дмитрий пн, 30/11/2019 - 23:31

Эх примерчик бы с регистрацией почты на яндексе... Разумеется с ошибками в синтаксе.

Alek$ пн, 30/11/2019 - 23:34

Ну что касается Яндекса, то пара рабочих вариантов бродит по сети. Найдите и будет вам пример :)
И вообще, на данном этапе, если вы прочли все три части, то должны уметь сами написать ;)

Гость вс, 18/07/2020 - 00:05

Вопрост такой я не могу запустить дополенеие для фокса, то биш: Web Developer окно дополнений виснет при запуске, с чем это связано?

Alek$ вс, 18/07/2020 - 14:14
Понятия не имею, я не специалист по расширениям мозиллы. Советую обратиться сюда: http://mozilla-russia.org/
Aspiring ср, 24/11/2020 - 14:37

Добрый день

Регистрационная страница toodoo притерпела некоторые изменения в коде. Изменил отправляемые POST данные.

Все время не могу зарегистрироваться. Как узнать где ошибка?

Вопрос конкретнее: как распечатать содержимое $result?
Перед закрытием сессий пробовал писать print_r($result), пробывал комментировать строку с CURLOPT_RETURNTRANSFER и запускать просто curl_exec($ch).

Aspiring чт, 25/11/2020 - 22:46

Cool. I got that *-)

Сейчас поковыряюсь пойму все детально.

Спасибо тебе за серию статей. Настоящий клад кода

huex пн, 14/02/2021 - 02:14

Есть ли какой нить инструмент для отслеживания ошибок и вообще всего что скрипт делает.
Пытаюсь применить эту регистрацию на другие ресурсы, просто не регистрирует, хотя вроде все норм.

Alek$ пн, 14/02/2021 - 11:59

Для такоих скриптов основные инструмены - это error_reporting и var_dump()



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

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