curl -o /dev/null -m 3600 -s -w "now=`date +%Y-%m-%d' '%H:%M:%S.%N`,http_coder=%{http_code},dns_time=%{time_namelookup},conn_time=%{time_connect},fistbyte=%{time_starttransfer},download_speed=%{speed_download},time_totle=%{time_total},size_download=%{size_download},remote_ip=%{remote_ip}\n" "http://aaa.com/test.mp3" -H "User-Agent:xxx-test" -H "Connection: Keep-Alive" -x 127.0.0.1:80
-w, --write-out <format>
Make curl display information on stdout after a completed
transfer. 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 are 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.
The output is by default written to standard output, but
can be changed with %{stderr} and %output{}.
Output HTTP headers from the most recent request by using
%header{name} where name is the case insensitive name of
the header (without the trailing colon). The header
contents are exactly as sent over the network, with
leading and trailing whitespace trimmed (added in 7.84.0).
Select a specific target destination file to write the
output to, by using %output{name} (added in curl 8.3.0)
where name is the full file name. The output following
that instruction is then written to that file. More than
one %output{} instruction can be specified in the same
write-out argument. If the file name cannot be created,
curl leaves the output destination to the one used prior
to the %output{} instruction. Use %output{>>name} to
append data to an existing file.
NOTE: In Windows the %-symbol is a special symbol used to
expand environment variables. In batch files all
occurrences of % must be doubled when using this option to
properly escape. If this option is used at the command
prompt then the % cannot be escaped and unintended
expansion is possible.
The variables available are:
certs Output the certificate chain with details.
Supported only by the OpenSSL, GnuTLS, Schannel and
Secure Transport backends. (Added in 7.88.0)
content_type
The Content-Type of the requested document, if
there was any.
errormsg
The error message. (Added in 7.75.0)
exitcode
The numerical exit code of the transfer. (Added in
7.75.0)
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.
ftp_entry_path
The initial path curl ended up in when logging on
to the remote FTP server.
header_json
A JSON object with all HTTP response headers from
the recent transfer. Values are provided as arrays,
since in the case of multiple headers there can be
multiple values. (Added in 7.83.0)
The header names provided in lowercase, listed in
order of appearance over the wire. Except for
duplicated headers. They are grouped on the first
occurrence of that header, each value is presented
in the JSON array.
http_code
The numerical response code that was found in the
last retrieved HTTP(S) or FTP(s) transfer.
http_connect
The numerical code that was found in the last
response (from a proxy) to a curl CONNECT request.
http_version
The http version that was effectively used. (Added
in 7.50.0)
json A JSON object with all available keys. (Added in
7.70.0)
local_ip
The IP address of the local end of the most
recently done connection - can be either IPv4 or
IPv6.
local_port
The local port number of the most recently done
connection.
method The http method used in the most recent HTTP
request. (Added in 7.72.0)
num_certs
Number of server certificates received in the TLS
handshake. Supported only by the OpenSSL, GnuTLS,
Schannel and Secure Transport backends. (Added in
7.88.0)
num_connects
Number of new connects made in the recent transfer.
num_headers
The number of response headers in the most recent
request (restarted at each redirect). Note that the
status line IS NOT a header. (Added in 7.73.0)
num_redirects
Number of redirects that were followed in the
request.
onerror
The rest of the output is only shown if the
transfer returned a non-zero error. (Added in
7.75.0)
proxy_ssl_verify_result
The result of the HTTPS proxy's SSL peer
certificate 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,
--location to follow redirects (or when
--max-redirs is met), this variable shows the
actual URL a redirect would have gone to.
referer
The Referer: header, if there was any. (Added in
7.76.0)
remote_ip
The remote IP address of the most recently done
connection - can be either IPv4 or IPv6.
remote_port
The remote port number of the most recently done
connection.
response_code
The numerical response code that was found in the
last transfer (formerly known as "http_code").
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.
This is the size of the body/data that was
transferred, excluding headers.
size_header
The total amount of bytes of the downloaded
headers.
size_request
The total amount of bytes that were sent in the
HTTP request.
size_upload
The total amount of bytes that were uploaded. This
is the size of the body/data that was transferred,
excluding headers.
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 verification
that was requested. 0 means the verification was
successful.
stderr From this point on, the -w, --write-out output is
written to standard error. (Added in 7.63.0)
stdout From this point on, the -w, --write-out output is
written to standard output. This is the default,
but can be used to switch back after switching to
stderr. (Added in 7.63.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.
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 negotiations
that are specific to the particular protocol(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 execution
time for multiple redirections.
time_starttransfer
The time, in seconds, it took from the start until
the first byte is received. 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 operation
lasted.
url The URL that was fetched. (Added in 7.75.0)
url.scheme
The scheme part of the URL that was fetched. (Added
in 8.1.0)
url.user
The user part of the URL that was fetched. (Added
in 8.1.0)
url.password
The password part of the URL that was fetched.
(Added in 8.1.0)
url.options
The options part of the URL that was fetched.
(Added in 8.1.0)
url.host
The host part of the URL that was fetched. (Added
in 8.1.0)
url.port
The port number of the URL that was fetched. If no
port number was specified, but the URL scheme is
known, that scheme's default port number is shown.
(Added in 8.1.0)
url.path
The path part of the URL that was fetched. (Added
in 8.1.0)
url.query
The query part of the URL that was fetched. (Added
in 8.1.0)
url.fragment
The fragment part of the URL that was fetched.
(Added in 8.1.0)
url.zoneid
The zone id part of the URL that was fetched.
(Added in 8.1.0)
urle.scheme
The scheme part of the effective (last) URL that
was fetched. (Added in 8.1.0)
urle.user
The user part of the effective (last) URL that was
fetched. (Added in 8.1.0)
urle.password
The password part of the effective (last) URL that
was fetched. (Added in 8.1.0)
urle.options
The options part of the effective (last) URL that
was fetched. (Added in 8.1.0)
urle.host
The host part of the effective (last) URL that was
fetched. (Added in 8.1.0)
urle.port
The port number of the effective (last) URL that
was fetched. If no port number was specified, but
the URL scheme is known, that scheme's default port
number is shown. (Added in 8.1.0)
urle.path
The path part of the effective (last) URL that was
fetched. (Added in 8.1.0)
urle.query
The query part of the effective (last) URL that was
fetched. (Added in 8.1.0)
urle.fragment
The fragment part of the effective (last) URL that
was fetched. (Added in 8.1.0)
urle.zoneid
The zone id part of the effective (last) URL that
was fetched. (Added in 8.1.0)
urlnum The URL index number of this transfer, 0-indexed.
Unglobbed URLs share the same index number as the
origin globbed URL. (Added in 7.75.0)
url_effective
The URL that was fetched last. This is most
meaningful if you have told curl to follow
location: headers.
If -w, --write-out is provided several times, the last set
value is used.
Example:
curl -w '%{response_code}\n' Example Domain
See also -v, --verbose and -I, --head.