PHP使用cURL返回“方法未实现”的FQL查询


FQL Query from PHP using cURL returning "Method Not Implemented"

我使用Facebook的Facebook查询语言(FQL)来获取用户的信息,一旦我已经知道他的用户id。当我在Firefox中输入以下URL时,它会为请求返回正确的XML:

http://api.facebook.com/method/fql.query?query=SELECT name FROM user WHERE uid= **'

返回用户名。

注意:请不要建议使用图形API,因为我实际上会使用FQL来实现尚未在图形中实现的东西,如网络,这只是一个简单的例子。

但是,当我进入我网站上执行以下PHP代码的页面时:

        $url = 'http://api.facebook.com/method/fql.query?query=SELECT name FROM user WHERE uid=**********';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);
        echo($response);
我看到

:

 Method Not Implemented
 Invalid method in request

这也不应该是一个身份验证问题,名称是公开可用的东西。

为了更深入地了解,当我输入任何格式错误的FQL请求时,PHP页面正确地返回一个错误的XML,就像在Firefox中输入URL时一样。只有当我输入一个正确格式的FQL请求时,它才与我在Firefox中看到的不同,也就是说,它给出了上面的错误,甚至不是XML。

任何想法?谢谢。

您是否正确编码查询参数?试试这样写:

$query = 'SELECT name FROM user WHERE uid=**********';
$url = 'http://api.facebook.com/method/fql.query?query=' . rawurlencode($query);

或者你可以使用Facebook PHP SDK,它会自动为你做这些。

我不太了解与FQL相关的错误消息,但SQL查询应该是url转义(urlencode - http://php.net/manual/en/function.urlencode.php)。