Скорая Компьютерная Помощь г. Калуга

Полный спектр компьютерных услуг!

Здравствуйте, гость ( Вход | Регистрация )

> Внимание!

  • Вся информация, расположенная в данном и других разделах форума получена из открытых источников (интернет-ресурсы, средства массовой информации, печатные издания и т.п.) и/или добавлена самими пользователями. Администрация форума предоставляет его участникам площадку для общения / размещения файлов / статей и т.п. и не несет ответственности за содержание сообщений, а также за возможное нарушение авторских, смежных и каких-либо иных прав, которое может повлечь за собой информация, содержащаяся в сообщениях.
Ремонт компьютеров в калуге Рекламное место сдается
 
Ответить в эту темуОткрыть новую тему
> PHP / Имитируем браузер с помощью Snoopy
Decker
сообщение 21.2.2011, 18:20
Сообщение #1


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1




Описание класса


«Snoopy» — это класс, предназначеный для имитации веб-браузера. Он позволяет упростить отправку форм и получение кода HTML-страниц посредством PHP. Данный класс является хорошей альтернативой «CURL». К сожалению, официальной онлайн-документации я так и не нашёл, но в Интернете есть множество статей по использованию данного класса.

Скачать класс можно здесь.




Некоторые возможности класса:


  • Поддержка прокси
  • Поддержка авторизации
  • Получение ссылок с веб-страницы
  • Получение текста веб-страницы (без тегов)
  • Получение содержимого веб-страницы
  • Установка заголовков (User-agent, Referrer, Host и т.д).
  • Поддержка фрэймов
  • Поддержка редиректов с возможностью настройки глубины переходов
  • Передача куков при редиректах
  • Отправка форм, с дальнейшим получением результатов



Основные поля и методы класса:


  • $snoopy->agent — User-agent
  • $snoopy->referer — Referrer
  • $snoopy->cookies — Cookies
  • $snoopy->rawheaders — заголовки
  • $snoopy->proxy — прокси
  • $snoopy->user — логин (HTTP-аутентификация)
  • $snoopy->pass — пароль (HTTP-аутентификация)
  • $snoopy->fetch($url) — получить содержимое страницы
  • $snoopy->fetchtext($url) — получить только текст страницы
  • $snoopy->fetchlinks($url) — получить все ссылки на странице
  • $snoopy->submit($url, $submit_array) — отправка формы
  • $snoopy->results — результаты





Начинаем


Для того, чтобы протестировать данный класс, сначала скачаем его, после этого распакуем архив на какой-нибудь хост и создадим пустой PHP-скрипт.




Получаем содержимое веб-страниц


Для того, чтобы получить содержимое любой веб-страницы, нам можно использовать метод «fetch», как показано ниже:

<?php
include('Snoopy.class.php'); // подключаем «Snoopy»

$snoopy = new Snoopy(); // создаём объект

$snoopy->fetch('http://www.google.com/'); // загружаем страницу

echo $snoopy->results; // выводим результат
?>



Отправка POST запросов


Конечно получение содержимого веб-страницы — хорошая функция, но мы можем получать содержимое и встроенными средствами PHP. Чаще всего «Snoopy» используют для отправки POST-запросов:

<?php
include('Snoopy.class.php'); // подключаем «Snoopy»

$snoopy = new Snoopy(); // создаём объект

/* создаём массив «$post_array» */
$post_array = array();
$post_array['city'] = 'Odessa';
$post_array['country'] = 'Ukraine';

/* cоздаем Cookies */
$snoopy->cookies['last_visit'] = 1298295000;
$snoopy->cookies['nickname'] = 'Mirgorod';

$snoopy->submit('http://test.ru/submit.php', $post_array);

echo $snoopy->results; // выводим результат
?>




Сервер получит следующие данные:

/* print_r($_POST); */
array(2) {
["city"]=>
string(6) "Odessa"
["country"]=>
string(7) "Ukraine"
}
/* print_r($_COOKIE); */
array(2) {
["last_visit"]=>
int(10) 1298295000
["nickname"]=>
string(8) "Mirgorod"
}





Поиск всех ссылок на странице


...
$snoopy->fetchlinks("http://www.google.com/"); // получаем все ссылки на странице

print ($snoopy->results); // выводим результат
...





Боевая задача


А сейчас, после того как мы получили достаточное количество информации о «Snoopy», мы испытаем его на практике!



Наша задача — авторизироваться на каком-нибудь произвольно сайте.




Класс на практике


Для начала нам нужно узнать какие поля мы передаём серверу. Для этого я использовать «Firebug» или «HTTPFox» — плагины для «Firefox».

После этого приступим непосредственно к делу:

<?php
include('snoopy/Snoopy.class.php'); // подключаем «Snoopy»

$snoopy = new Snoopy(); // создаём объект

/* Если захотим использовать proxy */
//$snoopy->proxy_host = "my.proxy.host";
//$snoopy->proxy_port = "8080";

/* создаём массив «$post_array» */
$post_array = array();
$post_array['username'] = 'Mirgorod';
$post_array['userpass'] = 'password';

$snoopy->agent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 Some plugins";
$snoopy->referer = "http://test.com/index.php";

$snoopy->rawheaders["Host"] = "test.com"; // Если сервер проверяет Host

$snoopy->maxredirs = 2; // Максимальное количество редиректов

$snoopy->submit('http://test.com/index.php', $post_array); // отправляем форму

echo $snoopy->results; // выводим результат
?>


(В примере используются изменённые данные)




Заключение


«Snoopy» упростил нам задачу симуляции поведения браузера. По моему мнению этот класс является более удобной альтернативой «CURL». Но всё же «Snoopy» не подходит для определенных задач. Например я не нашёл поддержку работы с загрузкой файлов.
Original source: habrahabr.ru (comments).

Читать дальше


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Рекламное место сдается Рекламное место сдается
Текстовая версия Сейчас: 29.3.2024, 14:23
Рейтинг@Mail.ru
Яндекс.Метрика Яндекс цитирования