Сначала рекомендую прочитать часть 1 - инструментарий.
В этой части я расскажу основные методы анализа форм регистрации и приведу пример написания простого регистратора для сервиса без капчи. Подопытным будет сервис закладок toodoo.ru :)
В прошлый раз я говорил, что нам понадобится Firefox и расширение Web Developer. Говорил я это не от скуки, а потому что это действительно облегчит жизнь. Этот способ анализа самый простой и наглядный, и его обычно более, чем достаточно.
Теперь действует просто: заходим на страницу регистрации, в панели Web Developer выбираем Формы → Информация о формах. В открывшейся вкладке мы получим детальное описание всех имеющихся форм на странице.
Определить нужную довольно легко по адресу скрипта-обработчика (поле "Действие" в таблице), по id или по именам полей.
Из этой таблицы нам понадобится список полей формы и их значения по умолчанию. Так же стоит сразу запомнить поля логина, емейла и пароля, они нам понадобятся при написании регистратора :)
Кроме того, если и более визуальный способ - Формы → Показать параметры форм:
На этот раз мы прибегнем к помощи еще более мощного инструмента - FireBug. Это инструмент воистину убийственной мощи и нужен он в основном для отлова всяких JavaScript'овых защит, добавляющих дополнительные поля, меняющих значения или посылающих дополнительные запросы. Из личного опыта скажу, что такое встречается очень не часто. По-настоящему необходим он был всего один раз, зато оправдал себя на все 100%.
Действуем так:
Вид → Исходный код страницы. И вкуриваем до просветления :) На самом деле, способ тоже ничего так себе, но два предыдущих удобнее. Зато это можно делать хоть в 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.
...будем учиться учимся бороться с капчей.
Прикрепленный файл | Размер |
---|---|
toodoo.php | 2.38 кб |
А без curl сложно это сделать? И еще хотелось бы про прокси узнать, где их берут, и как юзаются они в скриптах, но это наверное часть 4-5? =) Однако спасибо...
curl - самый простой вариант, потому что необходимо отправлять POST запросы. Можно, конечно, делать напрямую через fsockopen, но это в разы геморнее.
Про то, как юзать прокси я напишу, это просто :) Ну а где брать - лично дело каждого.
Покажите реализацию с проксями, пожалуйста.
Используйте curl_setopt() С параметрами CURLOPT_PROXY и CURLOPT_PROXYPORT
Эх примерчик бы с регистрацией почты на яндексе... Разумеется с ошибками в синтаксе.
Ну что касается Яндекса, то пара рабочих вариантов бродит по сети. Найдите и будет вам пример :)
И вообще, на данном этапе, если вы прочли все три части, то должны уметь сами написать ;)
Вопрост такой я не могу запустить дополенеие для фокса, то биш: Web Developer окно дополнений виснет при запуске, с чем это связано?
Добрый день
Регистрационная страница toodoo притерпела некоторые изменения в коде. Изменил отправляемые POST данные.
Все время не могу зарегистрироваться. Как узнать где ошибка?
Вопрос конкретнее: как распечатать содержимое $result?
Перед закрытием сессий пробовал писать print_r($result), пробывал комментировать строку с CURLOPT_RETURNTRANSFER и запускать просто curl_exec($ch).
Cool. I got that *-)
Сейчас поковыряюсь пойму все детально.
Спасибо тебе за серию статей. Настоящий клад кода
Есть ли какой нить инструмент для отслеживания ошибок и вообще всего что скрипт делает.
Пытаюсь применить эту регистрацию на другие ресурсы, просто не регистрирует, хотя вроде все норм.
Для такоих скриптов основные инструмены - это error_reporting и var_dump()
Отправить комментарий