cURL 响应时间 如何使用 curl 测量 Web API 的响应时间

2025-06-07

cURL 响应时间如何使用 curl 测量 Web API 的响应时间

为什么curl

有一堆用于对 HTTP 请求进行基准测试的特定工具。,,...
ab那么JMeter为什么 还要使用它呢?wrk
curl

这是因为curl它被广泛使用并且它是 Web 开发人员的一种通用语言。

此外,一些工具还具有将 HTTP 请求作为命令检索的功能curl

复制为 curl 命令

它非常有用,因为它不仅复制 URL 和参数,还复制包括Authorization或在内的请求标头Cookie

工具

在本文中,我使用了以下工具:

使用以下方法测量响应时间curl

首先,我们来准备一个curl命令。这次,我使用 Google Chrome 获取了访问我个人博客的命令。(Cookie已删除)

$ curl 'https://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Connection: keep-alive' --compressed
Enter fullscreen mode Exit fullscreen mode

它只是输出来自服务器的响应主体。

让我们附加这些选项。

-s -o /dev/null -w  "%{time_starttransfer}\n"
Enter fullscreen mode Exit fullscreen mode

-s是让进度保持静默,-o是将响应主体处理掉/dev/null

重要的是-w
我们可以指定多种格式,这次我用它来time_starttransfer检索响应时间(到第一个字节的时间)。

如下图所示:

$ curl 'https://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Connection: keep-alive' --compressed -s -o /dev/null -w  "%{time_starttransfer}\n"
0.188947
Enter fullscreen mode Exit fullscreen mode

响应时间为 0.188947 秒(188 毫秒)。

为了简化,我还创建了一个包装命令curlb

#!/bin/sh
curl -s -o /dev/null -w '%{time_starttransfer}\n' "$@"
Enter fullscreen mode Exit fullscreen mode

测量响应时间的百分位数

仅根据单个请求进行基准测试是不合适的。

然后我们来测量 100 个请求的百分位数。

ntimes对于此类目的很有用。

您可以使用它来安装go get github.com/yuya-takeyama/ntimes,或者存储库中有预先构建的二进制文件。

让我们将其附加ntimes 100 --到命令的开头curl

$ ntimes 100 -- curlb 'https://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Connection: keep-alive' --compressed
0.331915
0.064085
0.059883
0.074047
0.059774
...
Enter fullscreen mode Exit fullscreen mode

为了测量数字的百分位数,调用的命令percentile可能是最简单的选择。

通过安装它go get github.com/yuya-takeyama/percentile或从 repo 下载预先构建的二进制文件。

并附加到| percentile命令的末尾。

$ ntimes 100 -- curlb 'https://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Connection: keep-alive' --compressed | percentile
50%:    0.061777
66%:    0.06412
75%:    0.06872300000000001
80%:    0.07029000000000001
90%:    0.07496700000000001
95%:    0.076153
98%:    0.077226
99%:    0.07957
100%:   0.109931
Enter fullscreen mode Exit fullscreen mode

就是这样!

文章来源:https://dev.to/yuyatakeyama/how-i-measure-response-times-of-web-apis-using-curl-6nh
PREV
DevTips:使用早期返回来避免嵌套条件
NEXT
为什么应该使用 Array.some 而不是“for”循环或 forEach?