You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP cURL请求次数、执行时间等信息获取及返回0异常排查

问题分析与解决

你遇到的$http_request返回0的核心原因是代码里执行了两次curl_exec调用:第一次是开启CURLOPT_NOBODY=1的HEAD请求,第二次是正常GET请求。cURL的统计信息(包括CURLINFO_NUM_CONNECTS)会在每次curl_exec后被重置或覆盖,导致最后获取的是第二次请求的孤立统计,若第二次请求复用了第一次的连接,就可能返回0。

另外,单独发起HEAD请求获取Content-Type完全多余——一次GET请求完成后,就能通过curl_getinfo拿到响应的Content-Type。

修正后的代码

function file_get_contents_curl($url) {
    // 给User-Agent加默认值,兼容CLI等无HTTP环境
    $agent = $_SERVER['HTTP_USER_AGENT'] ?? 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36';
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);   
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);   
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    // 仅执行一次请求,同时获取内容和完整统计信息
    $data = curl_exec($ch);
    
    // 提取所需的统计数据
    $http_connect_count = curl_getinfo($ch, CURLINFO_NUM_CONNECTS);
    $total_time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
    $redirect_count = curl_getinfo($ch, CURLINFO_REDIRECT_COUNT);
    $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch); 

    // 设置响应Content-Type头
    if ($content_type) {
        header('Content-Type:' . $content_type);
    }

    // 输出统计信息
    echo "HTTP连接建立次数: " . $http_connect_count . "<br>";
    echo "总耗时: " . $total_time . " 秒<br>";
    echo "重定向次数: " . $redirect_count . "<br>";
    // 若需要总请求次数(初始请求+重定向),使用以下行
    echo "总HTTP请求次数: " . ($redirect_count + 1) . "<br>";

    return $data;
}

$homepage = file_get_contents_curl("https://example.com");
echo $homepage;

关键说明

  • 合并请求:只执行一次curl_exec,确保统计信息覆盖完整的请求流程(包括自动跟踪的重定向),不会被中途重置。
  • 统计项对应需求:
    • CURLINFO_NUM_CONNECTS:返回cURL建立的TCP连接数,对应你要的"发起HTTP请求的连接次数"。
    • CURLINFO_TOTAL_TIME:返回从初始化cURL到请求全部完成的总耗时(单位:秒)。
    • CURLINFO_REDIRECT_COUNT:返回自动跟踪的重定向次数,若要总请求次数(初始请求+重定向),用$redirect_count + 1即可。
  • 容错优化:给$_SERVER['HTTP_USER_AGENT']添加默认值,避免非Web环境(如CLI)下该变量不存在导致报错。

内容的提问来源于stack exchange,提问作者Mehul Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:32:08