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

Содержание

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

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

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

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

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

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

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

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

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

screen27.jpg

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

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

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

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

 screen28.jpg

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

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

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

Ниже я привожу подробно откомментированный код авторегистратора для toodoo.ru. В нем умышленно допущена пара простых синтаксических ошибок, чтобы кто попало не злоупотреблял им Wink Для того, чтобы их исправить, достаточно базовых знаний 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.ru - это UTF-8.

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

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

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



Trackback URL for this post:

http://nevkontakte.org.ru/trackback/367
Прикрепленный файлРазмер
toodoo.php2.38 кб
justrussian пн, 23/11/2009 - 00:53

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

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

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

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

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

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

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

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

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

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

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

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



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

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <b> <s> <u> <p> <h3> <br> <strike> <sup> <pre> <h4> <hr>
  • Строки и параграфы переносятся автоматически.
  • You may use [inline:xx] tags to display uploaded files or images inline.
  • Текстовые смайлы будут заменены на графические.
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.