Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I measure request and response times at once using cURL?

I have a web service that receives data in JSON format, processes the data, and then returns the result to the requester.

I want to measure the request, response, and total time using cURL.

My example request looks like:

curl -X POST -d @file server:port 

and I currently measure this using the time command in Linux:

time curl -X POST -d @file server:port 

The time command only measures total time, though - which isn't quite what I am looking for.

Is there any way to measure request and response times using cURL?

like image 892
sdasdadas Avatar asked Aug 13 '13 17:08

sdasdadas


People also ask

How do you measure cURL response time?

You can use curl -v --trace-time to add timestamps to the trace/verbose output. This must be done in verbose mode or trace mode to do anything.

How do you find response time?

You can calculate your average First Response Time based on a sum of all first response times divided by the number of resolved tickets.

What is cURL in response?

'cURL' is a command-line tool that lets you transmit HTTP requests and receive responses from the command line or a shell script. It is available for Linux distributions, Mac OS X, and Windows. To use cURL to run your REST web API call, use the cURL command syntax to construct the command.


2 Answers

Here is the answer:

curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total} 

All of the variables used with -w can be found in man curl.

like image 40
sdasdadas Avatar answered Oct 07 '22 09:10

sdasdadas


From this brilliant blog post... https://blog.josephscott.org/2011/10/14/timing-details-with-curl/

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

  1. Create a new file, curl-format.txt, and paste in:

         time_namelookup:  %{time_namelookup}s\n         time_connect:  %{time_connect}s\n      time_appconnect:  %{time_appconnect}s\n     time_pretransfer:  %{time_pretransfer}s\n        time_redirect:  %{time_redirect}s\n   time_starttransfer:  %{time_starttransfer}s\n                      ----------\n           time_total:  %{time_total}s\n 
  2. Make a request:

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

    Or on Windows, it's...

     curl -w "@curl-format.txt" -o NUL -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. Use quotes particularly if your URL has "&" query string parameters


And here is what you get back:

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

I have not yet seen an option to output the results in microseconds, but if you're aware of one, post in the comments below.


Make a Linux/Mac shortcut (alias)

alias curltime="curl -w \"@$HOME/.curl-format.txt\" -o /dev/null -s " 

Then you can simply call...

curltime wordpress.org 

Thanks to commenter Pete Doyle!


Make a Linux/Mac stand-alone script

This script does not require a separate .txt file to contain the formatting.

Create a new file, curltime, somewhere in your executable path, and paste in:

#!/bin/bash  curl -w @- -o /dev/null -s "$@" <<'EOF'     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 EOF 

Then call it the same way as the alias:

curltime wordpress.org 

Make a Windows shortcut (aka BAT file)

Create a new text file called curltime.bat in the same folder as curl.exe and curl-format.txt, and paste in the following line:

curl -w "@%~dp0curl-format.txt" -o NUL -s %* 

Then from the command line you can simply call:

curltime wordpress.org 

(Make sure the folder is listed in your Windows PATH variable to be able to use the command from any folder.)

like image 50
Simon East Avatar answered Oct 07 '22 09:10

Simon East