【问题标题】:Facebook JSON returning different data when accessed via browser, and via script/PHPFacebook JSON 在通过浏览器和脚本/PHP 访问时返回不同的数据
【发布时间】:2013-01-03 18:48:57
【问题描述】:

我有一个通过此 URL 定位的 Facebook 供稿: https://www.facebook.com/feeds/page.php?id=131872766880896&format=json

它是由 URL 指定的 JSON 格式。

当我在浏览器上输入这个 URL 时,我得到了一个有效的 JSON。但是,如果我要从 PHP 页面请求此 URL,或者使用 PHP 脚本(如 file_get_contents 然后 json_decode 或 jQuery getJSON),我得到的是 HTML 响应,它实际上是一个 Facebook 页面,要求我升级我的浏览器。通过将上述 URL 输入 JSON Lint 验证器,可以看到此响应的 HTML 代码。

我必须使用此方法,因为我正在为其构建提要的站点没有与之关联的 App ID,因此除非使用个人 Facebook 帐户,否则我无法获取访问令牌,这也不是由于 online_access 的弃用,这是一个可行的选择,这意味着我将不得不每 60 天手动重新生成一个长寿命的访问令牌。还是有另一种解决方法?我只需要在页面的 Feed 上显示最后一个条目,所以我想在 $data['entries'][0]['content'] 获取内容,其中 $data 是 JSON 对象。

这里的帖子Loading facebook wall feed JSON issues 表明用户最终通过PHP 加载它,然后通过AJAX 填充他的页面。但也如上所述,通过 PHP 加载它会为我提供 HTML 代码块,该代码块是通过将我想要使用的 Facebook 提要 URL 输入到 JSON Lint 中生成的。这是我的 PHP 代码的样子:

<?php
$feed = file_get_contents('https://www.facebook.com/feeds/page.php?id=131872766880896&format=json');
echo $feed;
?>

【问题讨论】:

  • Facebook 正在检查用户代理 HTTP 标头——因此,如果您想以这种方式访问​​受“保护”的资源,您必须发送一个用户代理标头,其中包含您的请求,看起来像一个电流,“真正的”浏览器。
  • 谢谢你解决了。如果您可以将其发布为对此问题的回复,我可以将其标记为解决方案。

标签: php facebook


【解决方案1】:

Facebook 正在检查用户代理 HTTP 标头 - 因此,如果您想访问以这种方式“受保护”的资源,您必须在您的请求中发送一个看起来像当前“真实”浏览器的用户代理标头。

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 2013-12-22
    • 2013-11-24
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    相关资源
    最近更新 更多