PHP cURL没有抓取网页

时间:2012-04-16 16:22:45

标签: php curl

正如您在代码中看到的,我正在尝试执行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也可能面临同样的问题。我认为这可能会导致答案。

2 个答案:

答案 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。