curl – use variables to show response times and other parameters
curl is a tool to interact with a server for transferring data. Although it supports various protocols, it is most commonly used with HTTP/S. It is sort of a browser for CLI folks and a go to tool when writing scripts to interact with servers.
In addition to transferring data, how do we show request and response parameters with curl. The answer is using variables, the complete list of variables can be found here.
Example – use “time_total” to show the total time, in seconds, that the full operation lasted.
$ curl -w %{time_total} https://www.gcplinux.com
1.149143
It is best to add the variables in a file and use curl to reference the file for better formatting. Here I have added several http request and response variables I am interested in, such as num_connects, size_download, size_header, time_namelookup, time_pretransfer etc.
daniel@hidmo:/tmp$ cat ccurl.txt
url_effective: %{url_effective}\n
content_type: %{content_type}\n
http_code: %{http_code}\n
http_version: %{http_version}\n
num_connects: %{num_connects}\n
num_redirects: %{num_redirects}\n
remote_ip: %{remote_ip}\n
size_download: %{size_download}\n
size_header: %{size_header}\n
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
daniel@hidmo:/tmp$ curl -H 'Cache-Control: no-cache' -L -w "@ccurl.txt" -o /dev/null -s https://www.gcplinux.com
url_effective: https://gcplinux.com/
content_type: text/html; charset=UTF-8
http_code: 200
http_version: 1.1
num_connects: 2
num_redirects: 1
remote_ip: 162.247.79.246
size_download: 71273
size_header: 537
time_namelookup: 0.008585
time_connect: 0.082511
time_appconnect: 0.264110
time_pretransfer: 0.264293
time_redirect: 1.287257
time_starttransfer: 3.077526
----------
time_total: 3.177939
As far as time related parameters, listed below are the ones you will most likely use –
- 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 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. (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 transferred. 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.
References –