Тут передо мной стала задача воспользоваться веб интерфейсом одного сервиса, подсунув на его страницу управляющий JS для автоматизации процесса. И в процессе размышлений на тему как это сделать, нашел вот такой простой класс-эмулятор браузера.  https://sourceforge.net/projects/snoopy/files/ Буду на нем делать прокладку между браузером и сервисом, если лень не обуяет. ;-))) А поскольку не люблю читать английские мануалы, то перевел ихний README, что тут и выкладываю.

ИМЯ:

Snoopy — сетевой клиент PHP версии 2.0.0

КРАТКИЙ ОБЗОР:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->fetchtext("http://www.php.net/");
print $snoopy->results;

$snoopy->fetchlinks("http://www.phpbuilder.com/");
print $snoopy->results;

$submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html";

$submit_vars["q"] = "amiga";
$submit_vars["submit"] = "Search!";
$submit_vars["searchhost"] = "Altavista";
	
$snoopy->submit($submit_url,$submit_vars);
print $snoopy->results;

$snoopy->maxframes=5;
$snoopy->fetch("http://www.ispi.net/");
echo "<PRE>\n";
echo htmlentities($snoopy->results[0]); 
echo htmlentities($snoopy->results[1]); 
echo htmlentities($snoopy->results[2]); 
echo "</PRE>\n";

$snoopy->fetchform("http://www.altavista.com");
print $snoopy->results;

ОПИСАНИЕ:

Что такое Snoopy?

Snoopy - это класс PHP, который имитирует веб-браузер. Например, он автоматизирует задачу извлечения содержимого веб-страницы и размещения форм.

Некоторые особенности Snoopy:

  • легко извлекать содержимое веб-страницы
  • простое извлечение текста с веб-страницы (удаление html-тегов)
  • простое извлечение ссылок с веб-страницы
  • поддерживает прокси-хосты
  • поддерживает базовую аутентификацию user/pass
  • поддерживает настройку user_agent, referer, cookies и содержимого заголовка
  • поддерживает переадресацию браузера и контролируемую глубину переадресаций
  • расширяет выбранные ссылки до полных URL-адресов (по умолчанию)
  • легко отправляет данные формы и извлекает результаты
  • поддерживает следующие html-фреймы (добавлена версия 0.92)
  • поддерживает передачу файлов cookie при перенаправлениях (добавлена версия 0.92)

ТРЕБОВАНИЯ:

Snoopy требует PHP с PCRE (Регулярные выражения, совместимые с Perl), и расширение OpenSSL для получения запросов HTTPS.

МЕТОДЫ КЛАССА:

fetch($URI)

Это метод, используемый для извлечения содержимого веб-страницы.
$URI - это полный URL-адрес страницы для извлечения.
Результаты выборки сохраняются в $this->results.
Если вы извлекаете фреймы, то $this->results содержит массив, каждый извлеченный фрейм, в воём элементе.

fetchtext($URI)

Ведет себя точно так же, как функция fetch(), за исключением того, что она возвращает только текст со страницы, удаляя html-теги и другие нерелевантные данные.

fetchform($URI)

Ведет себя точно так же, как функция fetch(), за исключением того, что она возвращает только элементы формы со страницы, удаляя html-теги и другие нерелевантные данные.

fetchlinks($URI)

Ведет себя точно так же, как функция fetch(), за исключением того, что она возвращает только ссылки со страницы. По умолчанию относительные ссылки преобразуются в их полную форму URL-адреса.

submit($URI,$formvars)

Отправляет форму на указанный $URI. $formvars - это массив передаваемых переменных формы.

submittext($URI,$formvars)

Ведет себя точно так же, как submit(), за исключением того, что возвращает только текст со страницы, удаляя html-теги и другие нерелевантные данные.

submitlinks($URI)

Ведет себя точно так же, как submit(), за исключением того, что возвращает только ссылки со страницы. По умолчанию относительные ссылки преобразуются в их полную форму URL-адреса.

ПЕРЕМЕННЫЕ КЛАССА: (значение по умолчанию в скобках)

  • $host хост, к которому нужно подключиться
  • $port порт, к которому нужно подключиться
    $proxy_host используемый прокси-хост, если таковой имеется
  • $proxy_port используемый прокси-порт, если таковой имеется
    прокси-сервер можно использовать только для http-URL-адресов, но не для https
  • $agent пользовательский агент для маскировки под (Snoopy v0.1)
  • $referer информация о реферере для передачи, если таковая имеется
  • $cookies файлы cookie для передачи, если таковые имеются
  • $rawheaders другая информация заголовка для передачи, если таковая имеется
  • $maxredirs максимальное количество разрешенных перенаправлений. 0=не допускается. (5)
  • $offsiteok следует ли разрешать перенаправление за пределы сайта. (true)
  • $expandlinks следует ли расширять ссылки на полные URL-адреса (true)
  • $user имя пользователя для аутентификации, если таковое имеется
  • $pass пароль для аутентификации, если таковой имеется
  • $accept типы приёма НТТР (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
  • $error куда отправляются ошибки, если таковые имеются
  • $response_code код ответа, возвращенный с сервера
  • $headers заголовки, возвращаемые с сервера
  • $maxlength максимальная длина возвращаемых данных
  • $read_timeout тайм-аут при операциях чтения (требуется PHP 4 Beta 4+)
    установите значение 0, чтобы запретить тайм-ауты
  • $timed_out true, если время ожидания операции чтения истекло (требуется PHP 4 Beta 4+)
  • $maxframes количество фреймов, за которыми мы будем следить
  • $status http-статус выборки
  • $temp_dir временный каталог, в который веб-сервер может записывать данные. (/tmp)
  • $curl_path системный путь к двоичному файлу cURL, установлен в значение false, если нет
    (эта переменная игнорируется начиная с версии Snoopy v1.2.6)
  • $cafile имя файла с сертификатом(ами) CA
  • $capath имя правильно хешированного каталога с сертификатом(ами) CA
    если установлено значение $cafile или $capath, проверка SSL-сертификата включена.

ПРИМЕРЫ:

Получить веб-страницу и отобразить возвращаемые заголовки и содержимое страницы (с экранированием html):

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->user = "joe";
$snoopy->pass = "bloe";

if($snoopy->fetch("http://www.slashdot.org/"))
{
	echo "response code: ".$snoopy->response_code."<br>\n";
	while(list($key,$val) = each($snoopy->headers))
		echo $key.": ".$val."<br>\n";
	echo "<p>\n";
	
	echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Отправить форму и распечатать заголовки результатов и страницу с html-экранированием:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html";

$submit_vars["q"] = "amiga";
$submit_vars["submit"] = "Search!";
$submit_vars["searchhost"] = "Altavista";

	
if($snoopy->submit($submit_url,$submit_vars))
{
	while(list($key,$val) = each($snoopy->headers))
		echo $key.": ".$val."<br>\n";
	echo "<p>\n";
	
	echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Отображение функциональности всех переменных:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->proxy_host = "my.proxy.host";
$snoopy->proxy_port = "8080";

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
$snoopy->referer = "http://www.microsnot.com/";

$snoopy->cookies["SessionID"] = 238472834723489l;
$snoopy->cookies["favoriteColor"] = "RED";

$snoopy->rawheaders["Pragma"] = "no-cache";

$snoopy->maxredirs = 2;
$snoopy->offsiteok = false;
$snoopy->expandlinks = false;

$snoopy->user = "joe";
$snoopy->pass = "bloe";

if($snoopy->fetchtext("http://www.phpbuilder.com"))
{
	while(list($key,$val) = each($snoopy->headers))
		echo $key.": ".$val."<br>\n";
	echo "<p>\n";
	
	echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

Извлечение содержимого во фреймах и отображение результатов:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->maxframes = 5;

if($snoopy->fetch("http://www.ispi.net/"))
{
	echo "<PRE>".htmlspecialchars($snoopy->results[0])."</PRE>\n";
	echo "<PRE>".htmlspecialchars($snoopy->results[1])."</PRE>\n";
	echo "<PRE>".htmlspecialchars($snoopy->results[2])."</PRE>\n";
}
else
	echo "error fetching document: ".$snoopy->error."\n";

АВТОРСКИЕ ПРАВА:

Copyright(c) 1999,2000 испи. Все права защищены.
Это программное обеспечение выпущено под Стандартной общественной лицензией GNU.
Пожалуйста, прочитайте отказ от ответственности в верхней части файла Snoopy.class.php.

БЛАГОДАРНОСТЬ:

Отдельное спасибо:
Peter Sorger <sorgo@cool.sk> помогите исправить ошибку перенаправления
Андрей Змиевский <andrei@ispi.net> реализует функцию тайм-аута
Патрик Санделин, <patric@kajen.com>, помогите с отладкой fetchform
Carmelo <carmelo@meltingsoft.com> различные исправления ошибок с фреймами