Ne v kontakte Antisocial programmer's blog

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

    articles     howto     regsubmitter     code

Содержание

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

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

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

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

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

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

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

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

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

screen27.jpg

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

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

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

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

screen28.jpg

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

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

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

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

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

blog comments powered by Disqus