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

简介: 今天给大家分享一个干货编程小技巧,上至架构师、下至开发者、运维男、QA, 得此利器,事半功倍。

cURL在我的眼里,就是一个httpClient手办,老伙计们知道怎么获得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.发起请求


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包含&查询字符串)


文本输出


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还有一个小技巧:模拟连接/传输超时


连接超时时间用--connect-timeout参数来指定,数据传输的最大允许时间用-m参数来指定。


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


数据传输的最大允许时间超时的话,出错提示形如:


curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

相关文章
|
运维 Kubernetes 监控
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
3919 0
|
JSON NoSQL Redis
redis-full-check校验工具
redis-full-check是阿里云Redis&MongoDB团队开源的用于校验2个redis数据是否一致的工具,通常用于redis数据迁移后正确性的校验。
24804 0
|
消息中间件 存储 运维
Rabbitmq消息大量堆积怎么办?
该文讨论了一个系统架构问题,主要涉及RabbitMQ在处理订单消息时遇到的性能瓶颈。首先,系统使用RabbitMQ是为了解耦和提高性能,前端创建订单后通过RabbitMQ发送消息给订单履约系统消费并执行后续操作。当订单流量激增时,消息堆积导致服务器压力增加。 排查解决方案: 1. 增加消费者以提高消费速度,但发现即使增加消费者,消息堆积问题仍未解决。 2. 分析消费者逻辑,发现调用库存系统接口可能导致处理速度慢。库存系统压力大,接口响应慢,加剧问题。 3. 实施清空堆积消息的策略,新建消费者快速消费消息并存储在表中,减轻服务器压力。待库存服务恢复后,再将消息推回RabbitMQ处理。
737 1
|
XML SQL 数据库
Error getting generated key or setting result to parameter object.必须执行该语句才能获得结果。
Error getting generated key or setting result to parameter object.必须执行该语句才能获得结果。
3031 47
|
3月前
|
测试技术 程序员 Go
Go语言测试简明指南:深度解读go test命令
总的来说,go test是 Go 语言中一个强而有力的工具,每个 Go 程序员都应该掌握并把它融入到日常的开发和调试过程中。就像是一个眼镜过滤出的太阳,让我们在宽阔的代码海洋中游泳,而不是淹没。用好它,让我们的代码更健壮,让我们的生产力更强效。
206 23
|
Java 微服务 Spring
Spring Boot中获取配置参数的几种方法
Spring Boot中获取配置参数的几种方法
1103 2
|
Prometheus 监控 Cloud Native
Prometheus 安全性与数据隐私
【8月更文第29天】Prometheus 是一个开源的监控系统,广泛应用于各种规模的企业中。随着 Prometheus 的普及,确保其安全性变得尤为重要。本文将详细探讨如何确保 Prometheus 服务器的安全性,包括认证、授权、加密通信等方面的措施,并提供相应的配置示例。
566 3
|
缓存 Linux 调度
Linux服务器如何查看CPU占用率、内存占用、带宽占用
Linux服务器如何查看CPU占用率、内存占用、带宽占用
4126 0