The main differences as I (Daniel Stenberg) see them. Please consider my bias towards curl since after all, curl is my baby.
What both commands do
- Perform HTTP(S) operations specified as URLs
- Require an option to follow redirects
-vto show sent request headers
- Support HTTP and SOCKS proxies
- HTTP Range requests
- netrc support
Transfer performance comparsion
Tranfering 80GB from a localhost Apache HTTP server to /dev/null on Linux.
httpie 0.9.8 needed 153 seconds. 535 MB/sec
curl 7.51.0 needed 25 seconds. 3276 MB/sec
- Written in C and uses libcurl
- supports many other protocols as well apart from HTTP(S)
- supports any amount of URLs on the command line
- can send binary POSTs
- Supports multiple HTTP methods in a single command line for different URLs
- Documented in a man page for offline documentation
- supports HTTP/1.0 requests
- features URL "globbing" for ranges and sequences
- Allows more invasive header modifications, like passing in invalid letters
in custom headers (
Content-Length:in a POST and removing the
Host:header from a request. Or just adding a header without a space after the colon.
- Supports happy eyeballs or explicit ipv4/ipv6 use
- Supports custom connection tricks like with --resolve and --connect-to
- HTTP/2 support (for both HTTP:// and HTTPS:// URLs)
- HTTP/3 support
- Offers compression using gzip, brotli and zstd
- Ships by default in macOS and Windows 10
HTTPie "cURL-like tool for humans"
- Written in Python and uses Requests
- Supports only a single URL on the command line!
- Has JSON support
- Colored output (curl only does bold headers)
- Assumes "name=value" for POSTS. "name:value" or just "data" is impossible to
send as arguments and has to be sent to stdin (not to mention POSTing
Connection:- which instead will be intepreted as remove that header please)
- Can you do a multipart POST with two text-only fields?
- Forbids UTF-8 symbols in HTTP request headers
- Doesn't allow a user to change the Content-Length: header
- Has an "Auth plugin" system that supports many more auth types than curl
- Can't send the same header field name multiple times in a request.
- Has no official man page
- No HTTP/2 or HTTP/3 support
- No Happy eyeballs
- Lacks HTTPS proxy support (HTTPS to the proxy, independently of the server's protocol)
- Missing brotli and zstd support
Updated: August 7, 2020 11:45 (Central European, Stockholm Sweden)