Most of the time we use Curl Command or Wget Command for file download and other related purpose.
We had written best command line download manager in the past. You can navigate those articles by clicking the corresponding URLs.
- aria2 – A Command Line Multi-Protocol Download Tool For Linux
- Axel – A Lightweight Command Line Download Accelerator For Linux
- Wget – A Standard Command Line Download Utility For Linux
- curl – A Nifty Command Line Download Tool For Linux
Today we are going to discuss about similar topic, The utility name is HTTPie.
It’s modern command line http client and best alternate for curl and wget commands.
What Is HTTPie?
HTTPie (pronounced aitch-tee-tee-pie) is a command line HTTP client.
The httpie tool is a modern command line http client which makes CLI interaction with web services.
It provides a simple http command that allows for sending arbitrary HTTP requests using a simple and natural syntax, and displays colorized output.
HTTPie can be used for testing, debugging, and generally interacting with HTTP servers.
Main Features
- Expressive and intuitive syntax
- Formatted and colorized terminal output
- Built-in JSON support
- Forms and file uploads
- HTTPS, proxies, and authentication
- Arbitrary request data
- Custom headers
- Persistent sessions
- Wget-like downloads
- Python 2.7 and 3.x support
How to install HTTPie in Linux?
Most Linux distributions provide a package that can be installed using the system package manager.
For Fedora
system, use DNF Command to install httpie.
$ sudo dnf install httpie
For Debian/Ubuntu
systems, use APT-GET Command or APT Command to install httpie.
$ sudo apt install httpie
For Arch Linux
based systems, use Pacman Command to install httpie.
$ sudo pacman -S httpie
For RHEL/CentOS
systems, use YUM Command to install httpie.
$ sudo yum install httpie
For openSUSE Leap
system, use Zypper Command to install httpie.
$ sudo zypper install httpie
1) How to request a URL using HTTPie?
The basic usage of httpie is to request a website URL as an argument.
# http 2daygeek.com HTTP/1.1 301 Moved Permanently CF-RAY: 4c4a618d0c02ce6d-LHR Cache-Control: max-age=3600 Connection: keep-alive Date: Tue, 09 Apr 2019 06:21:28 GMT Expires: Tue, 09 Apr 2019 07:21:28 GMT Location: https://2daygeek.com/ Server: cloudflare Transfer-Encoding: chunked Vary: Accept-Encoding
2) How to download a file using HTTPie?
You can download a file using HTTPie with the --download
parameter. This is similar to wget command.
# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png HTTP/1.1 200 OK Accept-Ranges: bytes CF-Cache-Status: HIT CF-RAY: 4c4a65d5ca360a66-LHR Cache-Control: public, max-age=7200 Connection: keep-alive Content-Length: 32066 Content-Type: image/png Date: Tue, 09 Apr 2019 06:24:23 GMT Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" Expires: Tue, 09 Apr 2019 08:24:23 GMT Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT Server: cloudflare Set-Cookie: __cfduid=dd2034b2f95ae42047e082f59f2b964f71554791063; expires=Wed, 08-Apr-20 06:24:23 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure Vary: Accept-Encoding Downloading 31.31 kB to "Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png" Done. 31.31 kB in 0.01187s (2.58 MB/s)
Alternatively you can save the output file with different name by using -o
parameter.
# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png -o Anbox-1.png HTTP/1.1 200 OK Accept-Ranges: bytes CF-Cache-Status: HIT CF-RAY: 4c4a68194daa0a66-LHR Cache-Control: public, max-age=7200 Connection: keep-alive Content-Length: 32066 Content-Type: image/png Date: Tue, 09 Apr 2019 06:25:56 GMT Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" Expires: Tue, 09 Apr 2019 08:25:56 GMT Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT Server: cloudflare Set-Cookie: __cfduid=d3eea753081690f9a2d36495a74407dd71554791156; expires=Wed, 08-Apr-20 06:25:56 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure Vary: Accept-Encoding Downloading 31.31 kB to "Anbox-1.png" Done. 31.31 kB in 0.01551s (1.97 MB/s)
3) How to resume partial download using HTTPie?
You can resume the download using HTTPie with the -c
parameter.
# http --download --continue https://speed.hetzner.de/100MB.bin -o 100MB.bin HTTP/1.1 206 Partial Content Connection: keep-alive Content-Length: 100442112 Content-Range: bytes 4415488-104857599/104857600 Content-Type: application/octet-stream Date: Tue, 09 Apr 2019 06:32:52 GMT ETag: "5253f0fd-6400000" Last-Modified: Tue, 08 Oct 2013 11:48:13 GMT Server: nginx Strict-Transport-Security: max-age=15768000; includeSubDomains Downloading 100.00 MB to "100MB.bin" | 24.14 % 24.14 MB 1.12 MB/s 0:01:07 ETA^C
You can verify the same in the below output.
root@Ubuntu18:/var/log# ls -lhtr 100MB.bin -rw-r--r-- 1 root root 25M Apr 9 01:33 100MB.bin
5) How to upload a file using HTTPie?
You can upload a file using HTTPie with the less-than symbol "<"
symbol.
$ http https://transfer.sh < Anbox-1.png
6) How to download a file using HTTPie with redirect symbol “>”?
You can download a file using HTTPie with the redirect ">"
symbol.
# http https://www.2daygeek.com/wp-content/uploads/2019/03/How-To-Install-And-Enable-Flatpak-Support-On-Linux-1.png > Flatpak.png # ls -ltrh Flatpak.png -rw-r--r-- 1 root root 47K Apr 9 01:44 Flatpak.png
7) How to send a HTTP GET method?
You can send a HTTP GET method in the request. The GET method is used to retrieve information from the given server using a given URI.
# http GET httpie.org HTTP/1.1 301 Moved Permanently CF-RAY: 4c4a83a3f90dcbe6-SIN Cache-Control: max-age=3600 Connection: keep-alive Date: Tue, 09 Apr 2019 06:44:44 GMT Expires: Tue, 09 Apr 2019 07:44:44 GMT Location: https://httpie.org/ Server: cloudflare Transfer-Encoding: chunked Vary: Accept-Encoding
8) How to submit a form?
Use the following format to Submit a forms. A POST request is used to send data to the server, for example, customer information, file upload, etc. using HTML forms.
# http -f POST Ubuntu18.2daygeek.com hello='World' HTTP/1.1 200 OK Accept-Ranges: bytes Connection: Keep-Alive Content-Encoding: gzip Content-Length: 3138 Content-Type: text/html Date: Tue, 09 Apr 2019 06:48:12 GMT ETag: "2aa6-5844bf1b047fc-gzip" Keep-Alive: timeout=5, max=100 Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT Server: Apache/2.4.29 (Ubuntu) Vary: Accept-Encoding
Run the following command to see the request that is being sent.
# http -v Ubuntu18.2daygeek.com GET / HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Host: ubuntu18.2daygeek.com User-Agent: HTTPie/0.9.8 hello=World HTTP/1.1 200 OK Accept-Ranges: bytes Connection: Keep-Alive Content-Encoding: gzip Content-Length: 3138 Content-Type: text/html Date: Tue, 09 Apr 2019 06:48:30 GMT ETag: "2aa6-5844bf1b047fc-gzip" Keep-Alive: timeout=5, max=100 Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT Server: Apache/2.4.29 (Ubuntu) Vary: Accept-Encoding
9) HTTP Authentication?
The currently supported authentication schemes are Basic and Digest
Basic auth
$ http -a username:password example.org
Digest auth
$ http -A digest -a username:password example.org
Password prompt
$ http -a username example.org