curl 分析 http 请求 rt时间延迟
curl 分析 http 请求 rt时间延迟
20190905 Chenxin
curl发送post请求,统计各阶段的响应时间(rt值,response time)
命令格式
curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" -d "param1=value1¶m2=value2" "http://47.56.108.137:8080/index"
或
curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" "http://47.56.108.137:8080/index"
或(推荐)
curl -o /dev/null -s -w 'time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n' 47.56.108.137:8080/index #每个解释一个换行.
或(推荐)
curl -o /dev/null -s -w 'time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n' www.baidu.com
-o:把curl返回的html,js写到/dev/null
-s:去掉所有状态
-w:按照后面的格式写出rt
time_namelookup: DNS 解析域名[www.taobao.com]的时间
time_commect: client和server端建立TCP 连接的时间
time_starttransfer: 从client发出请求;到web的server 响应第一个字节的时间
time_total: client发出请求;到web的server发送会所有的相应数据的时间
speed_download: 下载速度 单位 byte/s
\n: 输出结果后回车(后面无需空格,加空格也可以)
结果
0.005096::0.045880::0.089548::0.089726::144.000
time_namelookup time_commect time_starttransfer time_total speed_download
DNS tcp建立连接 server响应第一个字节 server返回所有数据 下载速度
这里可以优化(用IP) 物理距离导致(40ms) 服务器处理时间(45ms) 服务器处理时间(几乎0ms) 带宽
针对以上时间,比如第二列时间,是包含了第一列的时间的.
curl其他典型示例
等待以后慢慢添加
curl参数解析.以下部分可以不看(为指令自身参数说明,请通过指令自身输出查看)
-
完整参数
curl --help -
指令与参数解析
curl --manual
包含了 -w 的各个子参数解析说明
-w, --write-out <format>
Make curl display information on stdout after a completed trans-
fer. The format is a string that may contain plain text mixed
with any number of variables. The format can be specified as a
literal "string", or you can have curl read the format from a
file with "@filename" and to tell curl to read the format from
stdin you write "@-".
The variables present in the output format will be substituted
by the value or text that curl thinks fit, as described below.
All variables are specified as %{variable_name} and to output a
normal % you just write them as %%. You can output a newline by
using \n, a carriage return with \r and a tab space with \t.
NOTE: The %-symbol is a special symbol in the win32-environment,
where all occurrences of % must be doubled when using this
option.
The variables available are:
content_type The Content-Type of the requested document, if
there was any.
filename_effective
The ultimate filename that curl writes out to.
This is only meaningful if curl is told to write
to a file with the -O, --remote-name or -o,
--output option. It's most useful in combination
with the -J, --remote-header-name option. (Added
in 7.26.0)
ftp_entry_path The initial path curl ended up in when logging on
to the remote FTP server. (Added in 7.15.4)
http_code The numerical response code that was found in the
last retrieved HTTP(S) or FTP(s) transfer. In
7.18.2 the alias response_code was added to show
the same info.
http_connect The numerical code that was found in the last
response (from a proxy) to a curl CONNECT
request. (Added in 7.12.4)
http_version The http version that was effectively used.
(Added in 7.50.0)
local_ip The IP address of the local end of the most
recently done connection - can be either IPv4 or
IPv6 (Added in 7.29.0)
local_port The local port number of the most recently done
connection (Added in 7.29.0)
num_connects Number of new connects made in the recent trans-
fer. (Added in 7.12.3)
num_redirects Number of redirects that were followed in the
request. (Added in 7.12.3)
proxy_ssl_verify_result
The result of the HTTPS proxy's SSL peer certifi-
cate verification that was requested. 0 means the
verification was successful. (Added in 7.52.0)
redirect_url When an HTTP request was made without -L to fol-
low redirects, this variable will show the actual
URL a redirect would take you to. (Added in
7.18.2)
remote_ip The remote IP address of the most recently done
connection - can be either IPv4 or IPv6 (Added in
7.29.0)
remote_port The remote port number of the most recently done
connection (Added in 7.29.0)
scheme The URL scheme (sometimes called protocol) that
was effectively used (Added in 7.52.0)
size_download The total amount of bytes that were downloaded.
size_header The total amount of bytes of the downloaded head-
ers.
size_request The total amount of bytes that were sent in the
HTTP request.
size_upload The total amount of bytes that were uploaded.
speed_download The average download speed that curl measured for
the complete download. Bytes per second.
speed_upload The average upload speed that curl measured for
the complete upload. Bytes per second.
ssl_verify_result
The result of the SSL peer certificate verifica-
tion that was requested. 0 means the verification
was successful. (Added in 7.19.0)
time_appconnect
The time, in seconds, it took from the start
until the SSL/SSH/etc connect/handshake to the
remote host was completed. (Added in 7.19.0)
time_connect The time, in seconds, it took from the start
until the TCP connect to the remote host (or
proxy) was completed.
time_namelookup
The time, in seconds, it took from the start
until the name resolving was completed.
time_pretransfer
The time, in seconds, it took from the start
until the file transfer was just about to begin.
This includes all pre-transfer commands and nego-
tiations that are specific to the particular pro-
tocol(s) involved.
time_redirect The time, in seconds, it took for all redirection
steps including name lookup, connect, pretransfer
and transfer before the final transaction was
started. time_redirect shows the complete execu-
tion time for multiple redirections. (Added in
7.12.3)
time_starttransfer
The time, in seconds, it took from the start
until the first byte was just about to be trans-
ferred. This includes time_pretransfer and also
the time the server needed to calculate the
result.
time_total The total time, in seconds, that the full opera-
tion lasted.
url_effective The URL that was fetched last. This is most mean-
ingful if you've told curl to follow location:
headers.
If this option is used several times, the last one will be used.
- 附
常用参数
-A/--user-agent <string> 设置用户代理发送给服务器
-b/--cookie <name=string/file> cookie字符串或文件读取位置
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-D/--dump-header <file> 把header信息写入到该文件中
-e/--referer 来源网址
-f/--fail 连接失败时不显示http错误
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent 静音模式。不输出任何东西
-T/--upload-file <file> 上传文件
-u/--user <user[:password]> 设置服务器的用户和密码
-w/--write-out [format] 什么输出完成后
-x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
-#/--progress-bar 进度条显示当前的传送状态
其他参数
-a/--append 上传文件时,附加到目标文件
--anyauth 可以使用“任何”身份验证方法
--basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII文本传输
-d/--data <data> HTTP POST方式传送数据
--data-ascii <data> 以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)
--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)
--key <key> 私钥文件名 (SSL)
--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass <pass> 私钥密码 (SSL)
--engine <eng> 加密引擎使用 (SSL). "--engine list" for list
--cacert <file> CA证书 (SSL)
--capath <directory> CA目 (made using c_rehash) to verify peer against (SSL)
--ciphers <list> SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds> 设置最大请求时间
--create-dirs 建立本地目录的目录层次结构
--crlf 上传是把LF转变成CRLF
--ftp-create-dirs 如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
-F/--form <name=content> 模拟http表单提交数据
-form-string <name=string> 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header <line> 自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
-j/--junk-session-cookies 读取文件时忽略session cookie
--interface <interface> 使用指定网络接口/地址
--krb4 <level> 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate <rate> 设置传输速度
--local-port<NUM> 强制使用本地端口号
-m/--max-time <seconds> 设置最大传输时间
--max-redirs <num> 设置最大读取的目录数
--max-filesize <bytes> 设置最大下载的文件总量
-M/--manual 显示全手动
-n/--netrc 从netrc文件中读取用户名和密码
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
--ntlm 使用 HTTP NTLM 身份验证
-N/--no-buffer 禁用缓冲输出
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic 在代理上使用基本身份验证
--proxy-digest 在代理上使用数字身份验证
--proxy-ntlm 在代理上使用ntlm身份验证
-P/--ftp-port <address> 使用端口地址,而不是使用PASV
-Q/--quote <cmd> 文件传输前,发送命令到服务器
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry <num> 传输出现问题时,重试的次数
--retry-delay <seconds> 传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-S/--show-error 显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file> 对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
--url <URL> Spet URL to work with
-U/--proxy-user <user[:password]> 设置代理用户名和密码
-V/--version 显示版本信息
-X/--request <command> 指定什么命令
-y/--speed-time 放弃限速所要的时间。默认为30
-Y/--speed-limit 停止传输速度的限制,速度时间'秒
-z/--time-cond 传送时间设置
-0/--http1.0 使用HTTP 1.0
-1/--tlsv1 使用TLSv1(SSL)
-2/--sslv2 使用SSLv2的(SSL)
-3/--sslv3 使用的SSLv3(SSL)
--3p-quote like -Q for the source URL for 3rd party transfer
--3p-url 使用url,进行第三方传送
--3p-user 使用用户名和密码,进行第三方传送
-4/--ipv4 使用IP4
-6/--ipv6 使用IP6