正如您在代码中看到的,我正在尝试执行FQL查询并检索结果。我生成的查询完全正常,因为我已经通过浏览器测试了它。我首先使用file_get_contents()来检索网页,但它却给我一个400 Bad Request Error。有人建议使用cURL。
下面给出的代码段为$ query提供了 false 。如果我取消注释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也可能面临同样的问题。我认为这可能会导致答案。
答案 0 :(得分:1)
您应该urlencode
$query
和$token
,而不是整个网址。
$url = "https://graph.facebook.com/fql?q=" . urlencode($query) . "&access_token=" . urlencode($token);
答案 1 :(得分:0)
对于初学者,您可以在转储之前重复使用$query
变量。
其次,在您的(第一个)$query
变量上使用urlencode。 (Facebooks $令牌不需要网址编码)
编辑(不适合评论内容)
我自己刚试过这个:
<?
$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);
?>
这没有问题。 如果你想尝试这个,请告诉我,我会给你一个URL。把它释放到荒野中我并不舒服.. 也许源是您的代理..
修改强>
什么鬼啊......疯了! ;)http://hal.su/on/fbCurlTest.php?token=the%20token&id=the%id&start=0
将%20token替换为您的令牌,并将%20id替换为您的ID。