Skip to content

Instantly share code, notes, and snippets.

Last active November 23, 2023 02:16
Show Gist options
  • Save manifestinteractive/ce8dec10dcb4725b8513 to your computer and use it in GitHub Desktop.
Save manifestinteractive/ce8dec10dcb4725b8513 to your computer and use it in GitHub Desktop.
A friendly formatter for curl requests to help with debugging.
============= HOST: ==========\n
local_ip: %{local_ip}\n
local_port: %{local_port}\n
remote_ip: %{remote_ip}\n
remote_port: %{remote_port}\n
======= CONNECTION: ==========\n
http_version: %{http_version}\n
http_code: %{http_code}\n
http_connect: %{http_connect}\n
num_connects: %{num_connects}\n
num_redirects: %{num_redirects}\n
redirect_url: %{redirect_url}\n
============= FILE: ==========\n
content_type: %{content_type}\n
filename_effective: %{filename_effective}\n
ftp_entry_path: %{ftp_entry_path}\n
size_download: %{size_download}\n
size_header: %{size_header}\n
size_request: %{size_request}\n
size_upload: %{size_upload}\n
speed_download: %{speed_download}\n
speed_upload: %{speed_upload}\n
ssl_verify_result: %{ssl_verify_result}\n
url_effective: %{url_effective}\n
=== TIME BREAKDOWN: ==========\n
time_appconnect: %{time_appconnect}\n
time_connect: %{time_connect}\n
time_namelookup: %{time_namelookup}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
time_total: %{time_total}\n
Copy link

manifestinteractive commented Aug 17, 2015

Steps to Use:

#1. Make a file named sniff.txt and paste the contents of this gist into it
#2. Make an alias in your .bash_profile or .zshrc ( or whatever you use ) that looks like this ( make sure to source .bash_profile the file afterwards ):

alias sniff='curl -w "@/path/to/sniff.txt" -o /dev/null -O --remote-name --remote-header-name -s'

#3. Now you can use your alias to get some fun data back:


You will get a response that looks like this:

=============  HOST:  ==========

         local_port:  49364
        remote_port:  443

=======  CONNECTION:  ==========

       http_version:  1.1
          http_code:  400
       http_connect:  000
       num_connects:  1
      num_redirects:  0

=============  FILE:  ==========

       content_type:  application/json; charset=utf-8
 filename_effective:  /dev/null
      size_download:  62
        size_header:  510
       size_request:  111
        size_upload:  0
     speed_download:  247.000
       speed_upload:  0.000
  ssl_verify_result:  0

===  TIME BREAKDOWN:  ==========

    time_appconnect:  0.209910
       time_connect:  0.103317
    time_namelookup:  0.063557
   time_pretransfer:  0.210209
      time_redirect:  0.000000
 time_starttransfer:  0.250681
         time_total:  0.250819

Copy link

Only piece missing is:

"http_version": "%{http_version}",\n

Copy link

Also, filename_effective will always be /dev/null if you don't use -O, --remote-name and --remote-name-header.

Copy link

won't num_redirects always be zero since you don't pass the -L parameter to curl? and if you do use -L, wouldn't that mess up the timings since you then have multiple requests?

Copy link

Hi, do you mind explanning why total time is not the sum of all other values?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment