如何使用cURL获得请求/响应具体耗时?

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

cURL支持格式化输出请求的详细信息(请参阅cURL手册页的-w、–write out<format>获取更多信息)。

如题,我们将只关注如何知晓cURL请求的时间细节, 下面时间以s为单位。

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 , 因此 -o body.txt 可以将响应的body输出到body.txt文件
-s 通知cURL不显示进度条
"http://wordpress.com/" 是我们请求的URL,请使用引号包围(尤其当你的URL包含&查询字符串)

更多参数(参数区分大小写)请参考 curl--help, 下面记录一个完整的请求姿势:

   curl -w "@curl-format.txt" -o ./body.txt  -s  -i -X POST  'http://mdb.qa.xxxx.com/table/instance?method=batch_query'   -H 'Content-Type: application/json'  -d   '["idc in (logicidc_hd1,logicidc_hd2,officeidc_hd1)"]'
 
-H:   Header
-d:   data

文本输出

 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

输出的啥意思呢? 我解释一下:

  • time_namelookup:DNS 域名解析的时候,就是把http://wordpress.com 转换成ip地址的过程
  • time_connect:TCP 连接建立的时间,就是三次握手的时间
  • time_appconnect:SSL/SSH等上层协议建立连接的时间,比如 connect/handshake 的时间
  • time_pretransfer:从请求开始到响应开始传输的时间
  • time_starttransfer:从请求开始到第一个字节将要传输的时间
  • time_total:这次请求花费的全部时间

制作成Linux/Mac快捷命令(alise 别名)

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

制作成Linux/Mac 独立脚本

脚本不需要单独的包含格式化的文本。

在可执行路径中,创建名为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

制作成windows快捷方式(bat批处理)

把下面的命令写入curltime.bat:
curl -w "@%~dp0curl-format.txt" -o NUL -s %*

以上手段后,curltime wordpress.org就可以拿到cURL的请求耗时。


curl 有用的小技巧

模拟连接/请求超时, 单位是s.

  • 连接服务器超时用--connect-timeout参数来指定,

连接超时的话,出错提示形如:
curl: (28) connect() timed out!

  • 设置整个请求的最大允许时间用-m--max-time参数。

数据传输的最大允许时间超时的话,出错提示形如:
curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

posted @ 2021-12-13 10:31  博客猿马甲哥  阅读(1802)  评论(0编辑  收藏  举报