如何使用cURL获得请求和响应时间?

cURL在我的眼里,就是一个httpClient手办,老伙计们知道怎么获得cURL请求的具体耗时吗?  
cURL支持格式化输出请求的详细信息(请参阅cURL手册页的-w、–write out<format>获取更多信息)。
如题,我们只关注如何知晓cURL请求的时间细节, 下面时间以s为单位。
1. 创建一个文本文件curl-format.txt, 粘贴下面内容

  1. time_namelookup: %{time_namelookup}s\n
  2. time_connect: %{time_connect}s\n
  3. time_appconnect: %{time_appconnect}s\n
  4. time_pretransfer: %{time_pretransfer}s\n
  5. time_redirect: %{time_redirect}s\n
  6. time_starttransfer: %{time_starttransfer}s\n
  7. ----------\n
  8. time_total: %{time_total}s\n

2.发起请求

  1. url -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包含&查询字符串)
文本输出

  1. time_namelookup: 0.001s
  2. time_connect: 0.037s
  3. time_appconnect: 0.000s
  4. time_pretransfer: 0.037s
  5. time_redirect: 0.000s
  6. time_starttransfer: 0.092s
  7. ----------
  8. 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的文件,粘贴下面内容:

 

codeduidaima.com

  1. #!/bin/bash
  2. curl -w @- -o /dev/null -s "$@" <<'EOF'
  3. time_namelookup: %{time_namelookup}\n
  4. time_connect: %{time_connect}\n
  5. time_appconnect: %{time_appconnect}\n
  6. time_pretransfer: %{time_pretransfer}\n
  7. time_redirect: %{time_redirect}\n
  8. time_starttransfer: %{time_starttransfer}\n
  9. ----------\n
  10. time_total: %{time_total}\n
  11. EOF

制作成windows快捷方式(bat批处理)
把下面的命令写入curltime.bat:
curl -w "@%~dp0curl-format.txt" -o NUL -s %*
以上手段后,curltime wordpress.org就可以拿到cURL的请求耗时。
 
cURL还有一个小技巧:模拟连接/传输超时。
连接超时时间用--connect-timeout参数来指定,数据传输的最大允许时间用-m参数来指定。
连接超时的话,出错提示形如:curl: (28) connect() timed out!
数据传输的最大允许时间超时的话,出错提示形如:
curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值