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 错误请求错误