Linux - curl -w 参数详解
-w 的作用
- 完成请求传输后,使 curl 在 stdout 上显示自定义信息
- 格式是一个字符串,可以包含纯文本和任意数量的变量
输出格式
- 输出格式中的变量会被 curl 用对应的值替换掉
- 所有变量的格式为: %{variable name}
- 要输出一个普通的 % 只需将它们写为 %%
- 可以使用 \n、带 \r 的回车符和带 \t 的制表符来输出换行符
- 如果想通过文件来传入变量,可以用 @filename 的格式
变量列表
content_type(有用)
HTTP 请求的 Content-type

errormsg(有用)
错误信息
exitcode
转移的数字出口代码,不知道啥来的
filename_effective
curl 执行结果最终写入的文件名,当加上了 -o、-O 才有意义

ftp_entry_path
初始路径,当登录到远程 FTP 服务器时结束
http_code(有用)
响应码

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

remote_port(有用)
目标服务器的远程端口
response_code(有用)
和 http_code 一样,都是响应码

scheme
请求协议,就是 HTTP、HTTPS
size_download
下载的总字节数
size_header
下载头的总字节数
size_request(有用)
HTTP请求中发送的总字节数

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
所有时间都是秒单位
- 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

SSL 协议处理时间:time_appconnect【0.042989】 - time_namelookup【 0.008223】
Linux - curl -w 参数详解的更多相关文章
- (转)Linux curl命令参数详解
Linux curl命令参数详解 命令:curl在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具, ...
- Linux curl命令参数详解(6/23)
linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态. 在Linux中c ...
- Linux curl命令参数详解--转载
linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态. 一.Linux ...
- Linux curl命令参数详解
笔者出处:http://www.aiezu.com/system/linux/linux_curl_syntax.html linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支 ...
- linux ./configure 的参数详解
转载自http://blog.csdn.net/zjt289198457/article/details/6918656 linux ./configure 的参数详解 ./configure 该 ...
- Linux ifconfig-etho文件参数详解
1.ifcfg-eth0文件参数详解 DEVICE 网卡名称/网络接口的名称BOOTPROTO 系统启动地址协议 常用参数: none:不使用启动地址协议,none禁止DHCP bootp:BOOTP ...
- [Linux命令]curl命令参数详解——转载
linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态.curl命令参数介 ...
- curl常用参数详解及示例
curl简介 curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上. ...
- linux Tar 命令参数详解
tar命令 . 作用 tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户. . 格式 tar [主选项+辅选项] 文件或目录 eg: tar z ...
随机推荐
- Java数据库开发(三)之——补充
一.SQL注入与防范 使用PreparedStatement替代Statement对象,它提供了参数化SQL的方式 二.事务 定义 事务是并发控制的基本单位,满足ACID特征 原子性:atomicit ...
- 面试题四:手写sql
矫正数据,有以下2个表,建表语句如下所示 -- 订单表 create table t_order ( id int auto_increment primary key, name varchar(2 ...
- Http2.0详解
前言 HTTP/1.1协议为现在网络提供了20年的支持.从那时起,网站已经从静态的.文本驱动的文档发展为交互式的.富媒体的应用程序.在此期间底层协议保持不变这一事实正好说明了它的通用性和能力.但随着网 ...
- C语言的编译与链接
C语言源文件要经过编译.链接才能生成可执行程序:编译(Compile)会将源文件(.c文件)转换为目标文件.对于 VC/VS,目标文件后缀为.obj:对于GCC,目标文件后缀为.o.编译是针对单个源文 ...
- Java基础00-Java概述1
1. Java语言发展史 1.1 Java语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Univers ...
- Spring框架中一个有用的小组件:Spring Retry
1.概述 Spring Retry 是Spring框架中的一个组件, 它提供了自动重新调用失败操作的能力.这在错误可能是暂时发生的(如瞬时网络故障)的情况下很有帮助. 在本文中,我们将看到使用Spri ...
- ZooKeeper 分布式锁 Curator 源码 04:分布式信号量和互斥锁
前言 分布式信号量,之前在 Redisson 中也介绍过,Redisson 的信号量是将计数维护在 Redis 中的,那现在来看一下 Curator 是如何基于 ZooKeeper 实现信号量的. 使 ...
- java并发编程基础——线程通信
线程通信 当线程在系统内运行时,程序通常无法准确的控制线程的轮换执行,但我们可以通过一些机制来保障线程的协调运行 一.传统的线程通信 传统的线程通信主要是通过Object类提供的wait(),noti ...
- Kafka之--python-kafka测试kafka集群的生产者与消费者
前面两篇博客已经完成了Kafka的搭建,今天再来点稍高难度的帖子. 测试一下kafka的消息消费行为.虽然,kafka有测试的shell脚本可以直接测试,但既然我最近在玩python,那还是用pyth ...
- 就这?一篇文章让你读懂 Spring 事务
什么是事务 ▲ 百度百科 概括来讲,事务是一个由有限操作集合组成的逻辑单元.事务操作包含两个目的,数据一致以及操作隔离.数据一致是指事务提交时保证事务内的所有操作都成功完成,并且更改永久生效:事务回滚 ...
