。
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 | \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:标头,这将最有意义。
使用
更多
更多优秀内容,可以通过关注微信公众号【极客收藏夹】获取哦!