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

PHP cURL GET请求如何单独统计发送与接收阶段的耗时

你可以直接用PHP cURL扩展内置的阶段耗时统计功能实现需求,不需要在请求外层手动埋时间点,curl_getinfo() 提供了请求全流程各节点的耗时指标,可直接拆分你需要的发送、服务端处理、接收三个阶段的耗时:

代码示例

// 初始化cURL
$ch = curl_init('https://你的目标请求地址');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求
$response = curl_exec($ch);

// 读取cURL内置耗时指标,单位为秒,浮点数精度到微秒级
$totalTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
$connectTime = curl_getinfo($ch, CURLINFO_CONNECT_TIME); // TCP连接建立完成的时间
$preTransferTime = curl_getinfo($ch, CURLINFO_PRETRANSFER_TIME); // 所有准备工作完成、待发送请求的时间
$startTransferTime = curl_getinfo($ch, CURLINFO_STARTTRANSFER_TIME); // 本地收到第一个响应字节的时间
$appConnectTime = curl_getinfo($ch, CURLINFO_APPCONNECT_TIME); // HTTPS下TLS握手完成的时间,HTTP请求可忽略

// 计算各阶段耗时
if (curl_getinfo($ch, CURLINFO_HTTP_VERSION) >= CURL_HTTP_VERSION_2_TLS) {
    // HTTPS请求,剔除TLS握手耗时计算纯发送传输耗时
    $sendTransferCost = $preTransferTime - $appConnectTime;
} else {
    // HTTP请求,剔除TCP连接耗时计算纯发送传输耗时
    $sendTransferCost = $preTransferTime - $connectTime;
}
// 服务端处理+首字节回传的近似耗时
$serverProcessCost = $startTransferTime - $preTransferTime;
// 响应接收传输耗时
$receiveTransferCost = $totalTime - $startTransferTime;

// 输出结果
var_dump([
    '发送传输耗时(秒)' => $sendTransferCost,
    '服务端处理近似耗时(秒)' => $serverProcessCost,
    '接收传输耗时(秒)' => $receiveTransferCost,
    '总耗时(秒)' => $totalTime
]);

curl_close($ch);

精准隔离服务端处理时间的方案

如果需要完全剔除服务端处理时间,得到纯网络传输的发送、接收耗时,需要目标服务端配合做两点改造:

  1. 服务端收到完整请求时,记录当前UTC微秒级时间戳,写入响应头X-Req-Receive-Time
  2. 服务端处理完成、开始返回响应时,记录当前UTC微秒级时间戳,写入响应头X-Resp-Send-Time

拿到响应后读取这两个响应头的值,结合两边时钟校准后的时间差修正,即可得到完全精准的两段网络传输耗时。

注意事项

  • 你原来使用的DateTime类精度仅到秒级,不适合网络耗时统计,如需手动埋点建议使用microtime(true)获取微秒级浮点数时间戳
  • cURL内置的耗时指标统计精度已经足够覆盖绝大多数业务场景,无需额外手动统计总耗时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:27:02