Перейти к содержимому


Выбрать шаблон и создать сайт

CURL работа с yandex.ru, youtube.com и пр.

#1 Вячеслав

Вячеслав
  • Пользователь
  • 357 сообщений
  • Репутация: 0
0

Отправлено 13 Октябрь 2011 - 21:15

Всем привет!
Коллеги подскажите, может кто знает, поиски в гугле и яндексе ничего толкового недали, с одними сайтами (к примеру vimeo.com) этот код работает, а вот с yandex.ru, youtube.com, rutube.ru, vesti.ru - ничего не выводится, или же выводится сообщение :

Moved Permanently
The document has moved here.

где here - это ссылка ведущая на тот хост к которому обращаюсь через cURL и поидее должен получить html код для парсинга.
Подозреваю эта защита от парсинга, или код неправильны, как это обойти? По cURL чтото совсем мало инфы...
Благодарю!

Код:


<?php

ini_set('max_execution_time', 600);
$st_time = microtime(true);

function curl_get($host, $referer = null){

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_GET, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51');

$html = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
return $html;
}
//получаем html-код исходной страницы
//$html = curl_get("yandex.ru", 'http://google.com');
//$html = curl_get("masterwebs.ru", 'http://google.com');

//только этот работает:
$html = curl_get("vimeo.com", 'http://google.com');


echo $html;

?>

 

 

  • 0

#2 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 13 Октябрь 2011 - 22:46

Вроде выяснилось! Оказывается некоторые хосты (сайты, страницы) к которым обращаемся, создают редирект, поэтому и выводится то сообщение с ссылкой о которой я упоминал выше.

Лечится с помощю этой опции curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

<?php

ini_set('max_execution_time', 600);
$st_time = microtime(true);

function curl_get($host, $referer = null){

$ch = curl_init();

//показывает или скрывает заголовок удаленного сайта.
curl_setopt($ch, CURLOPT_HEADER, 0);
//подмена откуда пришли
curl_setopt($ch, CURLOPT_REFERER, $referer);
//подмена содержимого „User-agent”
//curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");

curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//curl_setopt($ch, CURLOPT_GET, 1);

// этот параметр не позволяет выводить результат парсинга на экран а поместить его в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//очень часто удаленные страницы создают редирект, это может пригодится… WRNING!!!
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$html = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
return $html;
}
//получаем html-код исходной страницы
$html = curl_get("youtube.com", 'http://google.com');




echo iconv("utf-8", "cp1251", $html);

?>

  • 0


Оформление форума – IPBSkins.ru