Facebook API 400 错误请求

Posted

技术标签:

【中文标题】Facebook API 400 错误请求【英文标题】:Facebook API 400 Bad Request 【发布时间】:2012-02-17 08:22:14 【问题描述】:

我正在尝试使用 Facebook api 来运行 fql 查询。我在 php 中设置了所有内容,代码如下所示:

  $app_id = 'APP_ID';
  $app_secret = 'APP_secret';
  $my_url = "url.com/facebook.php";


  $code = $_REQUEST["code"];

 //auth user
 if(empty($code)) 
    $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' 
    . $app_id . '&redirect_uri=' . urlencode($my_url) ;
    echo("<script>top.location.href='" . $dialog_url . "'</script>");
  

  //get user access_token
  $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
    . $app_id . '&redirect_uri=' . urlencode($my_url) 
    . '&client_secret=' . $app_secret 
    . '&code=' . $code;
  $access_token = file_get_contents($token_url);


  // Run fql query
  $fql_query_url = 'FQL_Query';
  $fql_query_result = file_get_contents($fql_query_url);
  $fql_query_obj = json_decode($fql_query_result, true);

使用上面的代码一切正常,但最近我决定更改我的 URL 结构,而不是通过 url.com/facebook.php 访问页面,我想通过 访问它>url.com/#facebook

当我对 $my_url 变量进行此更改时,我收到以下错误。

[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

有什么想法吗?谢谢!

【问题讨论】:

我投票决定将此问题作为题外话结束,因为 FQL 多年前已被删除,并且社区机器人遇到了它。 【参考方案1】:

好吧,让我们从 facebook 应用程序设置开始。在应用程序设置中定义“画布 URL”,如果您决定更改它,那么您不仅需要在代码中更改它,还需要在开发者应用程序的应用程序设置中进行更改。

另一件事是,如果 facebook 使用 url 调用您的页面,那么在进行身份验证时,您必须在 redirect_uri 参数中使用完全相同的 url,它在文档中 (http://developers.facebook.com/docs/authentication/)。这就是他们写的关于 redirect_uri 的内容:

redirect_uri 必须位于您在其中指定的站点 URL 的路径中 开发人员应用程序中摘要选项卡的网站部分。如果是 域的根,它应该以斜杠结尾。请注意,您的 redirect_uri 不能是重定向器。

为了验证您的应用,您必须通过授权 Graph API 令牌端点的代码和您的应用程序机密 - 以及 与上面使用的完全相同的 redirect_uri - 在 https://graph.facebook.com/oauth/access_token

现在,您将 url 更改为在其中包含哈希 (#) 的决定并不是一个好的决定。 url 的这一部分不适用于您尝试使用它的目的。只需谷歌“网址中的哈希部分”并阅读一下。

【讨论】:

感谢您的回复。我需要在我的 URL 中使用哈希,因为我无法让用户刷新页面,因为我存储的一些数据会丢失。我尝试了以上所有方法都没有运气。 Facebook 是否允许您在 URL 中使用哈希? 我最近几天遇到了一些问题,表明使用file-get-contents方法会导致问题...查看:***.com/questions/6903240/…和***.com/questions/9333139/…。除了这个问题,我强烈建议您不要将哈希用于服务器问题。它应该仅用于客户端功能。 感谢您的回复。我浏览了你发给我的链接,但还是有点迷茫。 我不承诺任何事情,但看起来 file_get_contents 不是最佳选择。在我发送的第一个链接中,他们展示了如何用另一种替代方法替换此方法的使用:curl。尝试使用它,看看它是否可以为您解决问题。【参考方案2】:

我在 XAMPP 中通过在 xampp/php/php.ini 文件中添加 extension=php_openssl.dll 解决了这个问题。 在某些版本的 XAMPP 中,这一行的注释类似于 ;extension=php_openssl.dll, 所以只需取消注释并重新启动 apache。

【讨论】:

以上是关于Facebook API 400 错误请求的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript POST API 请求错误 400 - 错误请求

Azure DevOps 发布 Api 400 错误请求错误

Web api: 400 错误请求

为啥我在尝试使用 fetch 连接 Api 时收到“错误请求”错误 400?

Instagram API 返回 400(错误请求)

在第二个 axios api 调用上获取错误 400 错误请求