如何使用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

相关文章
|
2月前
|
网络安全 Python
请求模块requests:请求方式
请求模块requests(一)
|
6月前
状态码对于理解HTTP请求和响应的流程,以及调试网络问题非常重要
【5月更文挑战第15天】HTTP状态码由三位数字表示,分为1xx-5xx五类。1xx为信息响应,2xx表示成功,如200(请求成功)、201(创建成功)。3xx是重定向,如301(永久移动)、302(临时重定向)。4xx表示客户端错误,如400(坏请求)、404(未找到)。5xx是服务器错误,包括500(内部服务器错误)和503(服务不可用)。这些状态码用于理解请求响应流程和调试网络问题。
75 1
|
3月前
|
JSON Unix 测试技术
Wrk压测发送Post请求的正确姿势
这篇文章是关于如何使用Wrk工具进行HTTP基准测试的指南,包括Wrk的安装、基本用法、执行Get和Post请求的示例,以及在进行Post请求测试时正确设置Lua脚本的重要性。
227 1
|
3月前
|
数据采集 存储 监控
Haskell爬虫中日志记录:监控HTTP请求与响应
Haskell爬虫中日志记录:监控HTTP请求与响应
|
11月前
|
前端开发 Java 应用服务中间件
如何获取HTTP请求时间与响应时间【附源码】
如何获取HTTP请求时间与响应时间【附源码】
519 0
|
6月前
|
测试技术 Linux
wrk GET请求压力测试
wrk GET请求压力测试
49 0
|
6月前
|
前端开发 应用服务中间件 nginx
使用nginx-http-concat资源请求合并功能 优化网站响应
使用nginx-http-concat资源请求合并功能 优化网站响应
75 0
|
Cloud Native Go API
使用 cURL 发送 HTTP 请求: 深入探讨与示例
使用 cURL 发送 HTTP 请求: 深入探讨与示例
351 0
|
XML JSON 测试技术
性能测试(10)——http请求详解
协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。 服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。 端口号:目标服务器的端口号,默认值为80 。 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。 路径:目标URL路径(不包括服务器地址和端口) Content encoding :内容的编码方式,默认值为iso8859 同请求一起发送参数:GET请求时url中附带参数可以通过此方式添加 消息体数据:POST/PUT请求JSON数据存放地 自动重定向:表示JM
267 0
性能测试(10)——http请求详解
如何查看HTTP接口的响应时间
WEB测试的过程中,&lt;a href=&quot;https://www.fgba.net/&quot; target=&quot;_blank&quot;&gt;富贵论坛&lt;/a&gt;经常会觉得系统慢,但是慢是一个感性的东西,如果这个时候直接找开发理论,开发也可能一脸懵逼,说这个问题不是我的接口,是XX原因,这个时候我们怎么办呢
859 0
如何查看HTTP接口的响应时间