Ne v kontakte Asocial programmer's blog

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

Содержание

  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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?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)