0

次のように、Facebookページからコンテンツを取得しようとしています:

echo file_get_contents("http://www.facebook.com/dma.y");

問題は、ページが表示されず、ブラウザをアップグレードする必要があるという別のページにリダイレクトされることです。次に、いくつかのヘッダーを含むリクエストを送信して、curl を使用してフェッチすることを考えました。

 echo get_follow_url('http://www.facebook.com/dma.y');
function get_follow_url($url){
        // must set $url first. Duh...
    $http = curl_init($url);
      curl_setopt($http, CURLOPT_RETURNTRANSFER, TRUE); 
       curl_setopt($http, CURLOPT_HTTPHEADER, get_headers('http://google.com'));
    // do your curl thing here
    $result = curl_exec($http);



 if(curl_errno($http)){ 
     echo "<br/>An error has been thrown!<br/>";
    exit(); 
 }
    $http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
    curl_close($http);
return $http_status;
}

それでも運はありません。Facebookにログインしているかどうかに応じて、404または200のステータスコード応答が返されるはずです。しかし、それは 301 を返します。これは、私の要求が通常のブラウザー要求ではないと識別されるためです。curlオプション設定で何が欠けていますか?

更新 私が実際にやろうとしているのは、この機能を複製することです:

スクリプトは、返されたステータス コードに応じて、関数 onload または onerror をトリガーします。

そのコードはページを取得します。ただし、その javascript メソッドはぎこちなく、firefox などの一部のブラウザーでは機能しません。これは javascript ファイルではないためです。

4

1 に答える 1

4

試してみたいことは、user_agentwith CURL を設定することです。

$url = 'https://www.facebook.com/cocacola';
$http = curl_init($url);
$fake_user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3';
curl_setopt($http, CURLOPT_USERAGENT, $fake_user_agent); 
$result = curl_exec($http);

これは、使用しているブラウザーをサーバーが確認するパラメーターです。これが Facebook のチェックをバイパスして、ページ上のすべての情報を提供するかどうかは 100% わかりませんが、試してみる価値は間違いなくあります! :)

于 2012-10-30T14:41:51.733 に答える