Timing Details With cURL

cURL supports formatted output for the details of the request ( see the cURL manpagefor details, under “-w, –write-out <format>” ). For our purposes we’ll focus just on the timing details that are provided.

Step one: create a new file, curl-format.txt, and paste in:

12345678910n            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}nn

Step two, make a request:

curl -w "@curl-format.txt" -o /dev/null -s http://wordpress.com/

What this does:

  • -w "@curl-format.txt" tells cURL to use our format file
  • -o /dev/null redirects the output of the request to /dev/null
  • -s tells cURL not to show a progress meter
  • http://wordpress.com/ is the URL we are requesting

And here is what you get back:

12345678   time_namelookup:  0.001      time_connect:  0.037   time_appconnect:  0.000  time_pretransfer:  0.037     time_redirect:  0.000time_starttransfer:  0.092                   ----------        time_total:  0.164

Jon was looking specifically at time to first byte, which is the time_starttransfer line. The other timing details include DNS lookup, TCP connect, pre-transfer negotiations, redirects (in this case there were none), and of course the total time.

The format file for this output provides a reasonable level of flexibility, for instance you could make it CSV formatted for easy parsing. You might want to do that if you were running this as a cron job to track timing details of a specific URL.

For details on the other information that cURL can provide using -w check out thecURL manpage.

Hits: 3