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

网络 通信技术
cURL在我的眼里,就是一个httpClient手办,老伙计们知道怎么获得cURL请求的具体耗时吗? ??

[[440015]]

本文转载自微信公众号「精益码农」,作者StackOverflow 。转载本文请联系精益码农公众号。

cURL在我的眼里,就是一个httpClient手办,老伙计们知道怎么获得cURL请求的具体耗时吗? ??

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

如题,我们只关注如何知晓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. ime_starttransfer:  %{time_starttransfer}s\n 
  7.                   ----------\n 
  8.        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包含&查询字符串)

文本输出

  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的文件,粘贴下面内容:

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

 

责任编辑:武晓燕 来源: 精益码农
相关推荐

2020-07-21 08:18:16

响应测试系统

2022-11-22 08:41:22

curlDELETELinux

2024-01-07 16:46:19

FiberHTTPWeb

2018-11-19 14:29:17

Spring BootXML支持

2022-07-03 21:00:58

VoIP 系统人工智能

2015-09-29 14:01:45

SPDY网络协议响应头网络协议

2009-12-10 09:11:52

Windows 7系统加速

2021-10-18 05:46:27

网络攻击恶意软件网络安全

2011-09-19 19:32:35

vista启动修复工具

2011-12-31 10:33:01

JavajHiccup

2017-04-13 10:14:46

curl命令分析

2020-10-09 08:29:24

POSTGET参数

2018-06-26 13:05:17

Windows 10pingInternet

2019-01-23 10:21:32

吞吐量响应时间CPU

2020-11-17 10:35:53

Firefox 83Firefox浏览器

2023-01-01 14:04:51

字节码接口系统

2019-09-18 14:46:52

mancheatLinux

2022-12-19 07:28:53

Kubernetes资源请求限制

2020-07-15 15:35:40

运维架构技术

2009-09-03 19:44:20

点赞
收藏

51CTO技术栈公众号