协慌网

登录 贡献 社区

如何使用 cURL 一次测量请求和响应时间?

我有一个 Web 服务,该服务接收 JSON 格式的数据,处理数据,然后将结果返回给请求者。

cURL衡量请求,响应和总时间。

我的示例请求如下所示:

curl -X POST -d @file server:port

目前,我在 Linux 中time命令对此进行了测量:

time curl -X POST -d @file server:port

尽管 time 命令仅测量时间 - 但这并不是我想要的。

有什么方法可以使用cURL衡量请求和响应时间?

答案

从这篇精彩的博客文章中... https://blog.josephscott.org/2011/10/14/timing-details-with-curl/

cURL 支持格式化输出以获取请求的详细信息(有关详细信息,请参见 cURL 联机帮助页,位于-w, –write-out <format> )。为了我们的目的,我们将只关注所提供的时序细节。以下时间以秒为单位

  1. 创建一个新文件 curl-format.txt 并粘贴:

    time_namelookup:  %{time_namelookup}s\n
            time_connect:  %{time_connect}s\n
         time_appconnect:  %{time_appconnect}s\n
        time_pretransfer:  %{time_pretransfer}s\n
           time_redirect:  %{time_redirect}s\n
      time_starttransfer:  %{time_starttransfer}s\n
                         ----------\n
              time_total:  %{time_total}s\n
  2. 发出请求:

    curl -w "@curl-format.txt" -o /dev/null -s "http://wordpress.com/"

或在 Windows 上,它是...

curl -w "@curl-format.txt" -o NUL -s "http://wordpress.com/"

这是做什么的:

-w "@curl-format.txt"告诉 cURL 使用我们的格式文件
-o /dev/null将请求的输出重定向到 / dev / null
-s告诉 cURL 不显示进度表
"http://wordpress.com/"是我们所请求的 URL。特别是在您的 URL 具有 “&” 查询字符串参数的情况下使用引号


这就是您得到的回报:

time_namelookup:  0.001s
      time_connect:  0.037s
   time_appconnect:  0.000s
  time_pretransfer:  0.037s
     time_redirect:  0.000s
time_starttransfer:  0.092s
                   ----------
        time_total:  0.164s

制作 Linux / Mac 快捷方式(别名)

alias curltime="curl -w \"@$HOME/.curl-format.txt\" -o /dev/null -s "

然后,您可以简单地致电...

curltime wordpress.org

感谢评论员皮特 · 道尔(Pete Doyle)!


制作 Linux / Mac 独立脚本

该脚本不需要单独的. txt 文件即可包含格式。

在可执行文件路径中的某个位置创建一个新文件 curltime,然后粘贴:

#!/bin/bash

curl -w @- -o /dev/null -s "$@" <<'EOF'
    time_namelookup:  %{time_namelookup}\n
       time_connect:  %{time_connect}\n
    time_appconnect:  %{time_appconnect}\n
   time_pretransfer:  %{time_pretransfer}\n
      time_redirect:  %{time_redirect}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n
EOF

以与别名相同的方式调用:

curltime wordpress.org

制作 Windows 快捷方式(又名 BAT 文件)

将此命令放在 CURLTIME.BAT 中(与 curl.exe 在同一文件夹中)

curl -w "@%~dp0curl-format.txt" -o NUL -s %*

然后,您可以简单地致电...

curltime wordpress.org

答案是:

curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total}

-w一起使用的所有变量都可以在man curl找到。

选项 1.测量total time

curl -o /dev/null -s -w 'Total: %{time_total}s\n'  https://www.google.com

样本输出:

在此处输入图片说明

选项 2。要获得time to establish connection time to first byte (TTFB)total time

curl -o /dev/null -s -w 'Establish Connection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n'  https://www.google.com

样本输出:

在此处输入图片说明

参考: 使用 curl 获取响应时间