-1

正如您在代码中看到的,我正在尝试执行 FQL 查询并检索结果。我生成的查询完全没问题,因为我已经通过浏览器对其进行了测试。我首先使用 file_get_contents() 来检索网页,但它让我遇到了 400 错误请求错误。有人建议改为使用 cURL。

下面给出的代码段给了我$query 的错误。如果我取消注释 urlencode() 行,脚本会继续运行并达到最大执行时间限制。我究竟做错了什么?

    $limit = $start + 100;
    $query = "select post_id, created_time, actor_id, message, attachment, comments, likes, type  from stream where source_id = $id limit $start, ". $limit;
    $url = "https://graph.facebook.com/fql?q=$query&access_token=$token";
    //$url = urlencode($url);
    echo $url.'<br>';
    $curl_handle=curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl_handle, CURLOPT_PROXY, "tcp://10.3.3.3:8080"); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Hi!');
    $query = curl_exec($curl_handle);
    var_dump($query);
    curl_close($curl_handle);

编辑:访问另一个 URL,file_get_contents 给了我这个错误“无法打开流:无法通过代理连接到 HTTPS 服务器”。由于这也是 HTTPS,cURL 也可能面临同样的问题。我认为这可能会导致答案。

4

2 回答 2

1

你应该是urlencodeing$query$token,而不是整个 URL。

$url = "https://graph.facebook.com/fql?q=" . urlencode($query) . "&access_token=" . urlencode($token);
于 2012-04-16T16:25:21.220 回答
0

对于初学者,您$query可以在转储变量之前重用它。

$query其次,在您的(第一个)变量上使用 urlencode 。(Facebook 的 $token 不需要 url 编码)


编辑(不适合在评论中)

我自己试过这个:

<?
    $token = $_GET["token"];
    $id = $_GET["id"];
    $start = 0;
    $limit = $start + 100;
    $query = urlencode("select post_id, created_time, actor_id, message, attachment, comments, likes, type from stream where source_id = $id limit $start, ". $limit);
    $url = "https://graph.facebook.com/fql?q=$query&access_token=$token";

    echo $url.'<br>';
    $curl_handle=curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

    $curlres = curl_exec($curl_handle);
    var_dump($query);
    print "\n\n";
    var_dump($curlres);
    curl_close($curl_handle);
?>

这没有问题。如果你想试试这个,请PM我,我会给你网址。我不喜欢将它发布到野外.. 或许来源是你的代理..


编辑

哦,到底是什么......发疯了!;)

http://hal.su/on/fbCurlTest.php?token=the%20token&id=the%id&start=0

将%20token 替换为您的令牌,并将%20id 替换为您的ID。

于 2012-04-16T16:27:49.320 回答