# 暗无天日

=============>DarkSun的个人博客

# 使用curl进行网站测速

• DNS 域名解析
• 通过SSL协议交换密钥（HTTPS)
• 与服务端创建 TCP 访问连接
• 客户端发起请求
• 服务端收到请求并准备回应内容
• 服务端回复回应内容

man curl 中关于 -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
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

http_version   The  http  version  that  was  effectively  used.

local_ip       The  IP  address  of  the  local  end of the most
recently done connection - can be either IPv4  or

local_port     The  local  port number of the most recently done

num_connects   Number of new connects made in the recent  trans‐

num_redirects  Number  of  redirects  that  were followed in the

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, --loca‐
tion  to follow redirects (or when --max-redir is
met), this variable will show the  actual  URL  a
redirect would have gone 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

scheme         The URL scheme (sometimes called  protocol)  that
was effectively used (Added in 7.52.0)

ers.

size_request   The total amount of bytes that were sent  in  the
HTTP request.

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

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:

If this option is used several times, the last one will be used.


time_namelookup
DNS 解析时间，可以与 --resolve 选项配合寻找最快的DNS
time_connect

time_appconnect

time_pretransfer

time_starttransfer

time_total

time_redirect

curl -so /dev/null -w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttransfer: %{time_starttransfer} | total: %{time_total} | size: %{size_download}\n" https://www.zasag.mn


dnslookup: 1.510 | connect: 1.757 | appconnect: 2.256 | pretransfer: 2.259 | starttransfer: 2.506 | total: 3.001 | size: 53107