2013-08-15 1 views
1

나는 그것은 내가 페이스 북에서 시도했지만되지 않은 모든 페이지에 잘 작동PHP 변화 DOM의 사용자 에이전트

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

모든 페이지의 제목을 얻을 수있는이 간단한 코드가 있습니다.

Facebook에서 시도 할 때 Welcome to Facebook - Log In, Sign Up or Learn More이 표시되지 않지만 Update Your Browser | Facebook이 표시됩니다.

나는 useragent에 문제가 있다고 생각합니다. 그래서 거기에 useragent를 변경하는 방법 또는 거기에 다른 해결책이 무엇입니까?

+0

내가 곱슬 곱슬 사용하여 HTML을로드하고 DOMDocument를 – DevZer0

+0

에 전달할 것을 그리고 어떻게 그것을 할 수 있습니다. 어떤 예제 코드가 있습니까? – Enve

+0

아래 내 대답을 확인 – DevZer0

답변

3

curl을 사용하지 않고 php.ini에서 사용자 에이전트를 설정할 수 있습니다. 그냥 당신이 다음 코드

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

있는 DOMDocument

를로드하기 전에 아래의 라인을 사용 :

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

아마도 사람들은 자신의 사이트를 긁어 모으기를 원하지 않을 것입니다. 당신이 다른 한편으로 수행 할 수있는 작업을 cURL하지만, 아마도 자신의 $_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)); 
2

는 사용자 에이전트를 변경할 수있는 직접적인 방법이 없다 DOMDocument에서. 당신은 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"; 
+0

어떻게 제목을 얻을 수 있습니까? '$ data'는 전체 페이지를 보여주고 있습니까? – Enve

+0

@Enve 나는 내 대답을 – DevZer0

+0

업데이트했습니다. 다른 페이지에서는 잘 작동하지만 페이스 북에서는 다시는 작동하지 않습니다. 이 오류를 보여줍니다.'Notice : C : \ localhost \ htdocs \ title \ index.php 17 행에있는 비 객체의 속성을 얻으려고합니다. ' – Enve