Curl-请求交互耗时格式化输出.md

Curl 命令是在运维过程中,非常常见的命令,cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
curl还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。

在使用时,会希望获取更多的信息,比如请求耗时,访问时延,请求大小等相关参数,虽然配合其他命令也可以实现该效果,比如time 命令配合curl命令公共使用,不过还是不够方便,可以使用curl 命令的格式化输出的功能,配置显示格式。

  • -w :从文件中读取要打印信息的格式
  • -o /dev/null :把响应的内容丢弃,因为我们这里并不关心它,只关心请求的耗时情况
  • -s :不要打印进度条

格式化文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\n
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
http_code: %{http_code}\n
----------\n
local_ip: %{local_ip}\n
size_download: %{size_download}\n
size_header: %{size_header}\n
size_request: %{size_request}\n
size_upload: %{size_upload}\n
speed_download: %{speed_download}\n
speed_upload: %{speed_upload}\n
\n
  • time_connect 建立到服务器的 TCP 连接所用的时间
  • time_starttransfer 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
  • time_total 完成请求所用的时间
  • time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间
  • speed_download 下载速度,单位-字节每秒。
  • time_namelookup :DNS 域名解析的时候,就是把 https://zhihu.com 转换成 ip 地址的过程
  • time_connect :TCP 连接建立的时间,就是三次握手的时间
  • time_appconnect :SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间
  • time_redirect :从开始到最后一个请求事务的时间
  • time_pretransfer :从请求开始到响应开始传输的时间
  • time_starttransfer :从请求开始到第一个字节将要传输的时间
  • time_total :这次请求花费的全部时间
  • http_code 状态码
  • http_connect
  • time_total 请求总用时
  • time_namelookup DNS 域名解析的时候,就是把 https://baidu.com 转换成 ip 地址的过程
  • time_connect TCP 连接建立的时间,就是三次握手的时间
  • time_appconnect SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间
  • time_redirect 从开始到最后一个请求事务的时间
  • time_pretransfer 从请求开始到响应开始传输的时间
  • time_starttransfer 从请求开始到第一个字节将要传输的时间

content_type所请求文档的Content-Type(如果有)。

filename_effective curl写入的最终文件名。仅当告诉curl使用-O,–remote-name或-o,–output选项写入文件时,这才有意义。与-J,–remote-header-name选项结合使用时,它最有用。 (在7.26.0中添加)

ftp_entry_path登录到远程FTP服务器时,初始路径curl最终结束。 (在7.15.4中添加)

http_code在上次检索的HTTP(S)或FTP(s)传输中找到的数字响应代码。在7.18.2中,添加了别名response_code以显示相同的信息。

http_connect在对curl CONNECT请求的最后一个响应(来自代理)中找到的数字代码。 (在7.12.4中添加)

http_version有效使用的http版本。 (在7.50.0中添加)

local_ip最近完成的连接的本地端的IP地址-可以是IPv4或IPv6(在7.29.0中添加)

local_port最近完成的连接的本地端口号(在7.29.0中添加)

num_connects最近传输中建立的新连接数。 (在7.12.3中添加)

num_redirects请求中遵循的重定向数。 (在7.12.3中添加)

proxy_ssl_verify_result请求的HTTPS代理的SSL对等证书验证的结果。 0表示验证成功。 (在7.52.0中添加)

redirect_url如果在没有-L,–location的情况下进行HTTP请求以跟随重定向(或满足–max-redir),则此变量将显示重定向将到达的实际URL。 (在7.18.2中添加)

remote_ip最近完成的连接的远程IP地址-可以是IPv4或IPv6(在7.29.0中添加)

remote_port最近完成的连接的远程端口号(在7.29.0中添加)

scheme有效使用的URL方案(有时称为协议)(在7.52.0中添加)

size_download已下载的字节总数。

size_header下载的标头的字节总数。

size_request HTTP请求中发送的字节总数。

size_upload已上传的字节总数。

speed_download卷曲为完整下载测得的平均下载速度。每秒字节数。

speed_upload为完整上传测量的平均卷曲上传速度。每秒字节数。

ssl_verify_result请求的SSL对等证书验证的结果。 0表示验证成功。 (在7.19.0中添加)

从这一点开始,-w,–write-out输出将被写入标准错误。 (在7.63.0中添加)

从此刻开始,-w,–write-out输出将被写入标准输出。这是默认设置,但在切换到stderr之后可用于切换回。 (在7.63.0中添加)

time_appconnect从开始到完成与远程主机的SSL / SSH / etc连接/握手所花费的时间(以秒为单位)。 (在7.19.0中添加)

time_connect从开始到完成TCP与远程主机(或代理)的连接所花费的时间(以秒为单位)。

time_namelookup从开始到名称解析完成所花费的时间(以秒为单位)。

time_pretransfer从开始到文件传输即将开始所花费的时间(以秒为单位)。这包括特定于所涉及的特定协议的所有预传输命令和协商。

time_redirect开始最终事务之前,所有重定向步骤(包括名称查找,连接,预转移和转移)花费的时间(以秒为单位)。 time_redirect显示多次重定向的完整执行时间。 (在7.12.3中添加)

time_starttransfer从开始到即将传输第一个字节所需的时间(以秒为单位)。这包括time_pretransfer以及服务器计算结果所需的时间。

time_total完整操作持续的总时间(以秒为单位)。

url_effective最后获取的URL。如果您告诉curl遵循location:标头,这将最有意义。

使用

更多

更多优秀内容,可以通过关注微信公众号【极客收藏夹】获取哦!

wx