Пишем простой авторегистратор. Часть 2 - основы.
Содержание
- Инструментарий
- Основы
- Боремся с капчей
- Подключаем антикапчу
- Подтверждение по email
- Пишем модуль для RegSubmitter
Сначала рекомендую прочитать часть 1 - инструментарий.
В этой части я расскажу основные методы анализа форм регистрации и приведу пример написания простого регистратора для сервиса без капчи. Подопытным будет сервис закладок toodoo.ru :)
Анализ формы. Способ первый.
В прошлый раз я говорил, что нам понадобится Firefox и расширение Web Developer. Говорил я это не от скуки, а потому что это действительно облегчит жизнь. Этот способ анализа самый простой и наглядный, и его обычно более, чем достаточно.
Теперь действует просто: заходим на страницу регистрации, в панели Web Developer выбираем Формы → Информация о формах. В открывшейся вкладке мы получим детальное описание всех имеющихся форм на странице.
Определить нужную довольно легко по адресу скрипта-обработчика (поле “Действие” в таблице), по id или по именам полей.
Из этой таблицы нам понадобится список полей формы и их значения по умолчанию. Так же стоит сразу запомнить поля логина, емейла и пароля, они нам понадобятся при написании регистратора :)
Кроме того, если и более визуальный способ - Формы → Показать параметры форм:
Анализ формы. Способ второй.
На этот раз мы прибегнем к помощи еще более мощного инструмента - FireBug. Это инструмент воистину убийственной мощи и нужен он в основном для отлова всяких JavaScript’овых защит, добавляющих дополнительные поля, меняющих значения или посылающих дополнительные запросы. Из личного опыта скажу, что такое встречается очень не часто. По-настоящему необходим он был всего один раз, зато оправдал себя на все 100%.
Действуем так:
- Заходим на страницу регистрации, заполняем форму так, чтобы было понятно, что и куда вы ввели (то есть, писать одинаковый текст типа qwe" не стоит - запутаетесь, какое поле за что отвечает)
- Активируем панель FireBug, выбираем вкладку “Сеть” (Net) активируем ее.
- Отправляем форму.
- Смотрим на панель FireBug. Первый из перечисленный запросов - наш. Наведение курсора на его заголовок покажет полный адрес с GET-параметрами. Чтобы посмотреть POST-параметры, надо развернуть запрос и открыть вкладку “Post”.
Анализ формы. Способ третий, для настоящих мужчин.
Вид → Исходный код страницы. И вкуриваем до просветления :) На самом деле, способ тоже ничего так себе, но два предыдущих удобнее. Зато это можно делать хоть в IE.
Пишем регистратор.
Ниже я привожу подробно откомментированный код авторегистратора для toodoo.ru. В нем умышленно допущена пара простых синтаксических ошибок, чтобы кто попало не злоупотреблял им ;) Для того, чтобы их исправить, достаточно базовых знаний PHP.
<?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 = 'dummy@yopmail.com';
$password = 'qwerty';
// Выводим, что мы будем регать
echo "Логин: $login, пароль: $password, email: $email<br/>";
// Регаем
if(register($login, $email, $password))
{
echo 'Успешно зарегистрирован';
}
else
{
echo '<b>Ошибка регистрации</b>';
// Все! ;-)
?>
Весь код одним скриптом: toodoo.php_.txt
Кроме того, есть один тонкий момент: файл должен быть сохранен в той же кодировке, что и подопытный сайт, поскольку мы проверяем успешность регистрации, ища кириллическую подстроку. Если сохранить в неправильной кодировке, то она никогда не найдется и все время будет выводиться ошибка. В случае с toodoo.ru - это UTF-8.
В следующей статье…
…будем учитьсяучимся бороться с капчей.