Linux - curl -w 参数详解

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Linux - curl -w 参数详解

-w 的作用


  • 完成请求传输后,使 curl 在 stdout 上显示自定义信息
  • 格式是一个字符串,可以包含纯文本和任意数量的变量

 

输出格式

  1. 输出格式中的变量会被 curl 用对应的值替换掉
  2. 所有变量的格式为: %{variable name}
  3. 要输出一个普通的 % 只需将它们写为 %%
  4. 可以使用 \n、带 \r 的回车符和带 \t 的制表符来输出换行符
  5. 如果想通过文件来传入变量,可以用 @filename 的格式

 

变量列表


content_type(有用)

HTTP 请求的 Content-type

image.png

errormsg(有用)

错误信息

 

exitcode

转移的数字出口代码,不知道啥来的

 

filename_effective

curl 执行结果最终写入的文件名,当加上了 -o、-O 才有意义

image.png

ftp_entry_path

初始路径,当登录到远程 FTP 服务器时结束

 

http_code(有用)

响应码

image.png

http_connect

在对 curl CONNECT 请求的最后响应(来自代理)中找到的数字代码

 

http_version

http 版本

 

local_ip(有用)

ip 地址,可以是ipv4,也可以是ipv6

 

num_connects

最近传输中,新的连接数

 

num_redirects

在请求中跳转的次数

 

redirect_url

当 curl 没有指定 -L、--location 参数跟随重定向时,此变量将显示重定向实将跳转的实际 URL

 

remote_ip(有用)

目标服务器的远程IP,可以是 ipv4、ipv6

image.png

remote_port(有用)

目标服务器的远程端口

 

response_code(有用)

和 http_code 一样,都是响应码

image.png

scheme

请求协议,就是 HTTP、HTTPS

 

size_download

下载的总字节数

 

size_header

下载头的总字节数

 

size_request(有用)

HTTP请求中发送的总字节数

image.png

size_upload

上传的总字节数

 

speed_download

平均下载速度,每秒字节数

 

speed_upload

平均上传速度,每秒字节数

 

time_namelookup(有用)

DNS 域名解析的耗时,就是把 https://zhihu.com 转换成 ip 地址的过程

 

time_connect(有用)

TCP 连接建立的时间,就是三次握手的时间

 

time_appconnect(有用)

SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间

 

time_redirect(有用)

  • 在最终事务开始之前,所有重定向步骤(包括名称查找、连接、预传输和传输)所用的时间(以秒为单位)
  • time_redirect 显示多个重定向的完整执行时间

 

time_pretransfer(有用)

从请求开始到响应开始传输的时间

 

time_starttransfer(有用)

  • 从请求开始到第一个字节将要传输的时间
  • 包括预传输时间和服务器处理结果所需的时间。

 

time_total(有用)

这次请求花费的全部时间

 

url_effective(有用)

  • 最后获取的 URL
  • 如果 curl 添加了 -L 且真的重定向之后,这个就很有用了

 

使用 curl 命令分析请求的耗时情况


实际工作中的问题

某个请求的响应特别慢,那想要分析为什么这个请求慢,到底是哪一步耗时长,应该怎么做?

 

强大的 curl -w

提供了 7 种 time 变量,上面就能看到

 

写一个文件,包含 7 种变量,还能比较好看的格式化输出

    time_namelookup:  %{time_namelookup}\n
       time_connect:  %{time_connect}\n
    time_appconnect:  %{time_appconnect}\n
      time_redirect:  %{time_redirect}\n
   time_pretransfer:  %{time_pretransfer}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}


请求 http

curl -w"@format.txt" -S -s -L -k -o /dev/null http://baidu.com

image.png

所有时间都是秒单位

  • DNS 解析查询时间:time_namelookup【 0.004146】
  • TCP 建立连接时间:time_connect【0.013002】 - time_namelookup【0.004146】
  • 服务器处理时间:time_starttransfer【0.02542】-time_pretransfer【0.013039】
  • 内容传输时间:time_totle【0.072124】-time_starttransfer【0.02542】

因为不是 https 协议和重定向,所以中间两个没有时间

 

请求 https

curl -w"@format.txt" -S -s -L -k -o /dev/null https://baidu.com

image.png

SSL 协议处理时间:time_appconnect【0.042989】 - time_namelookup【 0.008223】

相关文章
|
2月前
|
Linux
在Linux中,列出几种常见打包工具并写相应解压缩参数。
在Linux中,列出几种常见打包工具并写相应解压缩参数。
|
3月前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
2月前
|
Web App开发 Linux 数据安全/隐私保护
Linux curl命令详解
Linux curl命令详解
|
2月前
|
网络协议 Linux Shell
在Linux中,linux内核参数如何修改?
在Linux中,linux内核参数如何修改?
|
2月前
|
监控 Linux 测试技术
什么是Linux系统的网络参数?
【8月更文挑战第10天】什么是Linux系统的网络参数?
47 5
|
3月前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
|
2月前
|
缓存 网络协议 Unix
Linux 内核参数
Linux 内核参数
47 1
|
3月前
|
JSON Java Linux
linux 命令使用总结:vim,nohup,find,df,du,sudo,netstat,ll,curl,lastlog
linux 命令使用总结:vim,nohup,find,df,du,sudo,netstat,ll,curl,lastlog
54 5
|
2月前
|
存储 安全 Linux
在Linux中,内核调优配置文件名字有哪些?举例几个内核需要优化的参数配置?
在Linux中,内核调优配置文件名字有哪些?举例几个内核需要优化的参数配置?
|
2月前
|
存储 Linux Shell
在Linux中,如何编写脚本处理命令行参数?
在Linux中,如何编写脚本处理命令行参数?
下一篇
无影云桌面