PHP change DOM useragent

У меня есть этот простой код, чтобы получить название любой страницы

<?php $doc = new DOMDocument(); @$doc->loadHTMLFile('http://www.facebook.com'); $xpath = new DOMXPath($doc); echo $xpath->query('//title')->item(0)->nodeValue."\n"; ?> 

Он отлично работает на всех страницах, которые я пробовал, но не в Facebook.

Когда я пытаюсь в Facebook, он не отображается. Welcome to Facebook - Log In, Sign Up or Learn More , но он показывает Update Your Browser | Facebook Update Your Browser | Facebook .

Я думаю, что проблема с useragent. Так есть способ изменить useragent или есть ли другое решение для этого?

Solutions Collecting From Web of "PHP change DOM useragent"

Вы можете установить пользовательский агент в php.ini, без необходимости зависания. Просто используйте приведенные ниже строки перед загрузкой DOMDocument

 $agent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"; ini_set('user_agent', $agent); 

И тогда ваш код:

 $doc = new DOMDocument(); @$doc->loadHTMLFile('http://www.facebook.com'); $xpath = new DOMXPath($doc); echo $xpath->query('//title')->item(0)->nodeValue."\n"; 

Прямого метода изменения пользовательского агента в DOMDocument . Вы можете использовать curl для извлечения html, а затем перейти к DOMDocument . Вот как получить данные из curl

 $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec($ch); curl_close($ch); 

Вы можете передать его в DomDocument используя приведенный ниже метод.

 $dom = new DomDocument(); $dom->loadHtml($data); $xpath = new DOMXPath($dom); echo $xpath->query('//title')->item(0)->nodeValue."\n"; 

Facebook, вероятно, не хочет, чтобы люди царапали свой сайт. С другой стороны, вы можете сделать это, но предоставить законный пользовательский агент (возможно, свой собственный, $_SERVER['HTTP_USER_AGENT'] а затем предоставить этот результат в DOMDocument .

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'www.facebook.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); $dom = new DomDocument(); $dom->loadHtml(curl_exec($ch));