POSTing with CURL with timings

June 7, 2019

I wanted to do a POST with CURL with a JSON payload and produce some performance stats in the process.

First create this file as curl-format.txt:

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

Next, run the following curl command:

$ curl --header "Content-Type: application/json" \
    --request POST \
    --data '{ "userName": "drumcoder", "password": "sekr1t", "forceSignIn": true, "ipAddress": "127.0.0.1" }' \
    -o /dev/null \
    -w "@curl-format.txt" \
    "http://host:port/service_offset"

This produces output like:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   125  100    37  100    88    180    429 --:--:-- --:--:-- --:--:--   609
 time_namelookup:  0.062041
       time_connect:  0.074656
    time_appconnect:  0.000000
   time_pretransfer:  0.074685
      time_redirect:  0.000000
 time_starttransfer:  0.205717
                    ----------
         time_total:  0.205750

The timings are in seconds, and the definitions are available at https://curl.haxx.se/docs/manpage.html

These include:

  • 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.