使用PHP进行CURL - 非常慢

时间:2009-12-29 20:38:55

标签: php curl libcurl

所有

我必须请求一个返回JSON请求的URL。我正在使用PHP和CURL来做到这一点。目前,请求和响应大约需要3-4秒。

以下是卷曲代码

    $ch = curl_init();
    $devnull = fopen('/tmp/curlcookie.txt', 'w');

    curl_setopt($ch, CURLOPT_STDERR, $devnull);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $desturl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

    $ret = curl_exec($ch);

    curl_close($ch);

    if ($devnull)
    {
        fclose($devnull);
    }

以下是CURL_GETINFO数组

Array
(
    [url] => https://xx.xx.xxx.xx/portalsite/tester
    [content_type] => application/json
    [http_code] => 200
    [header_size] => 198
    [request_size] => 835
    [filetime] => -1
    [ssl_verify_result] => 20
    [redirect_count] => 0
    [total_time] => 2.054561
    [namelookup_time] => 6.5E-5
    [connect_time] => 0.016048
    [pretransfer_time] => 0.123947
    [size_upload] => 699
    [size_download] => 46735
    [speed_download] => 22746
    [speed_upload] => 340
    [download_content_length] => 0
    [upload_content_length] => 0
    [starttransfer_time] => 1.743973
    [redirect_time] => 0
)

如何加快CURL处理时间?

由于

3 个答案:

答案 0 :(得分:4)

看起来大部分时间都在等待服务器响应(starttransfer_time - pretransfer_time = 1.620026)...也许服务器正在做一些需要时间的数据库或其他操作?

答案 1 :(得分:4)

根据this answer(类似问题)如果您使用的是Mac OS X,并且使用xxxx.local127.0.0.1 myproject.local /etc/hosts/访问您的项目,则cURL可能会很慢}

正如@lepix所说:

  

这是因为.local tld是为Bonjour服务保留的   自Mac OS X Lion(10.7)以来。

希望它会有所帮助,感谢lepix。

答案 2 :(得分:3)

我有一些这样的问题,使用wget它很快(最多1秒),使用cURL花了大约5秒钟来获取页面,当tcpdump-ing我发现cURL尝试进行反向DNS查找时,如果服务器没有注册反向DNS注册它会降低你的速度,我在我的本地DNS服务器上设置反向DNS,所以现在使用cURL对该网站的每个请求都非常快。我没有找到一种方法来禁用cURL设置中的反向DNS查找。

我的消化是扫描你的交通工具,看看它等待的时间长了。