Получение содержимого URL методом GET

Задача
Необходимо получить содержимое URL. Например, требуется вставить часть одной веб-страницы в содержимое другой страницы.

Решение
Передайте URL функции fopen() и получите содержимое страницы с помощью функции fread():

$page = '';
$fh = fopen('http://www.example.com/robots.txt','r') or die($php_errormsg);
while (! feof($fh)) {
$page .= fread($fh,1048576);
}
fclose($fh);

Можно прибегнуть к расширению cURL:

$c = curl_init('http://www.example.com/robots.txt');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);

А можно применить класс HTTP_Request из PEAR:

require 'HTTP/Request.php';
$r = new HTTP_Request('http://www.example.com/robots.txt');
$r->sendRequest();
$page = $r->getResponseBody();

Обсуждение
Для того чтобы получить доступ к защищенной странице, можно поместить имя пользователя и пароль в URL. В приведенном ниже примере имя пользователя – david, а пароль – hax0r. Покажем, как это сделать с помощью функции fopen():

$fh = fopen('http://david:hax0r@www.example.com/secrets.html','r')
or die($php_errormsg);
while (! feof($fh)) {
$page .= fread($fh,1048576);
}
fclose($fh);
Ниже показано, как это выполнить, применяя расширение cURL:$c = curl_init('http://www.example.com/secrets.html');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_USERPWD, 'david:hax0r');
$page = curl_exec($c);
curl_close($c);

Теперь посмотрим, как это сделать с помощью класса HTTP_Request:

$r = new HTTP_Request('http://www.example.com/secrets.html');
$r->setBasicAuth('david','hax0r');
$r->sendRequest();
$page = $r->getResponseBody();

Функция fopen() следует переадресациям, определенным в заголовках ответа Location, а класс HTTP_Request этого не делает.


Расширение cURL подчиняется им, только если установлен параметр CURLOPT_FOLLOWLOCATION:

$c = curl_init('http://www.example.com/directory');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
$page = curl_exec($c);
curl_close($c);

Расширение cURL может делать некоторые другие вещи с извлеченной страницей. Если установлен параметр CURLOPT_RETURNTRANSFER, то функция curl_exec() возвращает строку, содержащую полученную страницу:

$c = curl_init('http://www.example.com/files.html');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);

Для записи извлеченной страницы в файл откройте дескриптор файла на запись с помощью функции fopen() и установите для этого дескриптора файла параметр CURLOPT_FILE:

$fh = fopen('local-copy-of-files.html','w') or die($php_errormsg);
$c = curl_init('http://www.example.com/files.html');
curl_setopt($c, CURLOPT_FILE, $fh);
curl_exec($c);
curl_close($c);

Чтобы передать ресурсы cURL и содержимое полученной страницы в функцию, установите значение параметра CURLOPT_WRITEFUNCTION равным имени этой функции:

// сохраняем URL и содержимое страницы в базу данных
function save_page($c,$page) {
$info = curl_getinfo($c);
mysql_query("INSERT INTO pages (url,page) VALUES ('" .
mysql_escape_string($info['url']) .


"', '" .
mysql_escape_string($page) . "')");}
$c = curl_init('http://www.example.com/files.html');
curl_setopt($c, CURLOPT_WRITEFUNCTION, 'save_page');
curl_exec($c);
curl_close($c);

Если ни один из параметров CURLOPT_RETURNTRANSFER, CURLOPT_FILE или CURLOPT_WRITEFUNCTION не установлен, то расширение cURL выводит содержимое возвращенной страницы.

Функция fopen() вместе с параметрами include и require может получать доступ к удаленным файлам, только если доступ к таковым разрешен. А по умолчанию он разрешен и управляется с помощью параметра настройки allow_url_fopen. Однако в Windows опции include и require не дают возможности извлекать удаленные файлы в версиях PHP более
ранних, чем 4.3, даже если параметр allow_url_fopen установлен в on..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Анализ файла протокола веб-сервера
Выделение информации на веб-странице
Извлечение содержимого URL с помощью метода POST
Извлечение ссылок из HTML-файла
Использование шаблонов системы Smarty

Вернуться в раздел: PHP / 11. Автоматизация работы с Web