Есть несколько очевидных способов.
Способ 1. Используйте Simple HTML DOM Parser в связке с cURL.
Самый простой способ. И для меня — самый удобный. Для установки юзерагента используйте параметр CURLOPT_USERAGENT.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
curl_setopt($ch, CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$html_curl = curl_exec($ch);
curl_close($ch);
$html = str_get_html($html_curl);
Способ 2. Можете установить браузер по умолчанию в php.ini или использовать ini_set().
Пример:
ini_set("user_agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
Тоже достаточно простой и удобный способ. Первый я в основном использую из-за того, что, как правило, приходится работать с cURL-ом (и с его возможностями) при загрузке страниц, поэтому мне удобнее установить User Agent именно там. Если бы курл был не нужен - использовала бы ini_set.
Способ 3. Можете непосредственно внести изменения в функцию библиотеки load_file().
Я сама этот способ не пробовала, но в архивах на всякий случай записан этот способ, взятый с стэковерфлоу.
В исходном коде функция выглядит следующим образом:
// load html from file
function load_file() {
$args = func_get_args();
$this->load(call_user_func_array('file_get_contents', $args), true);
}
А ее модификация может быть, например, такой:
// load html from file
function load_file() {
$args = func_get_args();
// Added by Mithun
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n".
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
$args[1] = FALSE;
$args[2] = $context;
// End Mithun
$this->load(call_user_func_array('file_get_contents', $args), true);
}
Еще раз напомню, для чего вам User Agent. Допустим, вы пишете парсер, краулер или бота. Некоторые вебмастеры в robots.txt запрещают доступ к материалам сайта, если в хэдэре запроса установлен User Agent, стандартный для библиотек, работающих с http (или информация о нем вообще отсутствует). Устанавливая User Agent, вы маскируете свой запрос так, словно он поступил от браузера.
Но в любом случае надо знать меру. Если вы генерируете сотни запросов в минуту, то никакой юзерагент вас не прикроет :)
___
Чтобы быть в курсе обновлений блога, можно подписаться на RSS.
добрый день!
ОтветитьУдалитьспасибо за статью.
будет ли работать последний вариант при использовании file_get_html()?
Здраствуйте! Curl выбивает ошибку на user Agent. Не могу разобратся в чем проблема.
ОтветитьУдалитьWarning: curl_setopt(): supplied argument is not a valid cURL handle resource in C:\Program Files\VertrigoServ\www\parser\proxy\2ip.php on line 6
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.ip-1.ru/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
curl_setopt($ch, CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$dorf1 = curl_exec($ch);
curl_close($ch);
Версия курл-7.16.0
Анонимный, я думаю, вы уже нашли у себя ошибку :) Написано cr вместо ch...
ОтветитьУдалить