2

我想使用 PHP 下载 Facebook 网页。我已经尝试了 file_get_contents 和 stream_context_create。我也试过卷曲。但 Facebook 只回复这条信息:

更新您的浏览器 您正在使用 Facebook 不支持的网络浏览器。要获得更好的体验,请访问以下站点之一并获取您首选浏览器的最新版本:

我错过了什么吗?

这是卷曲代码:

       $url="https://www.facebook.com/media/set/?set=a.189662541197403.1073741845.188398434657147&type=1&l=a8755a774e";
        $custom_headers = array();
        $custom_headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        $custom_headers[] = "Pragma: no-cache";
        $custom_headers[] = "Cache-Control: no-cache";
        $custom_headers[] = "Accept-Language: en-us;q=0.7,en;q=0.3";
        $custom_headers[] = "Accept-Charset: utf-8,windows-1251;q=0.7,*;q=0.7";

        $ch = curl_init();
        $useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1";
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent); // set user agent
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $custom_headers);

        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,20);
        curl_setopt($ch, CURLOPT_TIMEOUT, 40); //timeout in seconds

        $txResult = curl_exec($ch);

        $statuscode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        print "$txResult";
4

2 回答 2

3

改用 API?

您提到的 URL 的数据也可以从这个中检索:

http://graph.facebook.com/?id=189662541197403

此外,这会将您的整个代码减少到这一行:

json_decode(file_get_contents('http://graph.facebook.com/?id=189662541197403'));
于 2013-07-11T10:47:24.397 回答
2

facebook Api 对 fb 数据有一些限制

如果你想废弃 Facebook 页面,你需要等到所有的 Javascript 都加载完毕后再卷曲页面

您需要使用无头浏览器引擎来执行此操作。cURL 和 wget 是 HTTP 库;他们说 HTTP 并以字符串的形式下载文档。他们没有 DOM 或 JavaScript 引擎的概念来帮助他们理解页面正在执行 AJAX 或 JS 。所以要下载 HTML,你需要一个更像浏览器的东西,通过解析 DOM 和执行 JS。我推荐使用 Mozilla 引擎的http://simile.mit.edu/wiki/Crowbar 。一旦 js 运行,你就可以轻松地废弃你想要的内容

我希望这对你有帮助:)

于 2013-09-20T09:23:56.200 回答