关于php:cURL有时不工作并给出空结果

cURL not working sometimes and gives empty result

我用curl从另一个网站获取数据。有时显示数据,有时显示空结果

这是我的密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function get_data($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        $agent=$_SERVER["HTTP_USER_AGENT"];
        curl_setopt($ch,CURLOPT_USERAGENT, $agent);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);

        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
    $returned_content = get_data('www.example.com');
    echo $returned_content;


可能您从curl_init调用了太多连接到一个IP地址,因此服务器会阻塞连接并导致开/关错误。


不接收任何内容可能是由于许多不同的原因中的一个或多个,您需要找出哪个原因。

  • 在执行传输之后,在代码中使用curl_error($ch),查看curl是否告诉过您问题。

  • 调查响应头。HTTP传输可以成功,不会返回任何错误,但可能只使用HTTP头响应,根本没有主体。然后,HTTP头可能包含有关原因的线索。也许这是您应该遵循的重定向,也许它需要HTTP身份验证,或者服务器指示临时服务器故障。


  • 可以使用"wget"使用shell访问此内容。

    1
    2
    3
    4
    5
    6
    7
    8
    function wget($url){

        //get contnet with wget since some sites are not allowed with curl or file_get_content requests

        $content=`wget -O - $url`;

        return $content;
    }


    可能间歇性的故障是由于不稳定的DNS服务器造成的,即使它不是,使用谷歌的DNS服务器仍然会使您受益。请参阅:https://developers.google.com/speed/public-dns/docs/using


    PHP中的curl在AWS EC2实例上返回空值

    我也遇到过类似的问题,我通过确保php.in i文件中php5和apache2文件夹中的版本和设置相同来解决这个问题。如果不是这样,Apache2会尝试执行php.ini设置中设置的版本。还要确保安装了php5 libcurl。这也很重要。