HTTPie:替代 Curl 和 Wget 的現代 HTTP 命令列客戶端
大多數時間我們會使用 curl
命令或是 wget
命令下載檔案或者做其他事。
我們以前曾寫過 最佳命令列下載管理器 的文章。你可以點選相應的 URL 連線來瀏覽這些文章。
- aria2 – Linux 下的多協議命令列下載工具
- Axel – Linux 下的輕量級命令列下載加速器
- Wget – Linux 下的標準命令列下載工具
- curl – Linux 下的實用的命令列下載工具
今天我們將討論同樣的話題。這個實用程式名為 HTTPie。
它是現代命令列 http 客戶端,也是 curl
和 wget
命令的最佳替代品。
什麼是 HTTPie?
HTTPie (發音是 aitch-tee-tee-pie) 是一個 HTTP 命令列客戶端。
HTTPie 工具是現代的 HTTP 命令列客戶端,它能透過命令列介面與 Web 服務進行互動。
它提供一個簡單的 http
命令,允許使用簡單而自然的語法傳送任意的 HTTP 請求,並會顯示彩色的輸出。
HTTPie 能用於測試、除錯及與 HTTP 伺服器互動。
主要特點
- 具表達力的和直觀語法
- 格式化的及彩色化的終端輸出
- 內建 JSON 支援
- 表單和檔案上傳
- HTTPS、代理和認證
- 任意請求資料
- 自定義頭部
- 持久化會話
- 類似
wget
的下載 - 支援 Python 2.7 和 3.x
在 Linux 下如何安裝 HTTPie
大部分 Linux 發行版都提供了系統包管理器,可以用它來安裝。
Fedora 系統,使用 DNF 命令 來安裝 httpie:
$ sudo dnf install httpie
Debian/Ubuntu 系統,使用 APT-GET 命令 或 APT 命令 來安裝 HTTPie。
$ sudo apt install httpie
基於 Arch Linux 的系統,使用 Pacman 命令 來安裝 HTTPie。
$ sudo pacman -S httpie
RHEL/CentOS 的系統,使用 YUM 命令 來安裝 HTTPie。
$ sudo yum install httpie
openSUSE Leap 系統,使用 Zypper 命令 來安裝 HTTPie。
$ sudo zypper install httpie
用法
如何使用 HTTPie 請求 URL?
HTTPie 的基本用法是將網站的 URL 作為引數。
# 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
如何使用 HTTPie 下載檔案
你可以使用帶 --download
引數的 HTTPie 命令下載檔案。類似於 wget
命令。
# 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)
你還可以使用 -o
引數用不同的名稱儲存輸出檔案。
# 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)
如何使用 HTTPie 恢復部分下載?
你可以使用帶 -c
引數的 HTTPie 繼續下載。
# 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
你根據下面的輸出驗證是否同一個檔案:
[email protected]:/var/log# ls -lhtr 100MB.bin
-rw-r--r-- 1 root root 25M Apr 9 01:33 100MB.bin
如何使用 HTTPie 上傳檔案?
你可以透過使用帶有小於號 <
的 HTTPie 命令上傳檔案
$ http https://transfer.sh < Anbox-1.png
如何使用帶有重定向符號 > 下載檔案?
你可以使用帶有重定向 >
符號的 HTTPie 命令下載檔案。
# 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
傳送一個 HTTP GET 請求?
您可以在請求中傳送 HTTP GET 方法。GET 方法會使用給定的 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
提交表單?
使用以下格式提交表單。POST 請求用於向伺服器傳送資料,例如客戶資訊、檔案上傳等。要使用 HTML 表單。
# 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
執行下面的指令以檢視正在傳送的請求。
# 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
HTTP 認證?
當前支援的身份驗證認證方案是基本認證(Basic)和摘要驗證(Digest)。
基本認證:
$ http -a username:password example.org
摘要驗證:
$ http -A digest -a username:password example.org
提示輸入密碼:
$ http -a username example.org
via: https://www.2daygeek.com/httpie-curl-wget-alternative-http-client-linux/
作者:Magesh Maruthamuthu 選題:lujun9972 譯者:zgj1024 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
相關文章
- Irssi:命令列下的IRC客戶端命令列客戶端
- 命令列客戶端MySQL如何使用命令列客戶端MySql
- ElasticSearch-命令列客戶端操作Elasticsearch命令列客戶端
- curl wget bondwget
- RetrofitJs – TypeScript實現的宣告式HTTP客戶端JSTypeScriptHTTP客戶端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- 在沒有curl和wget情況下傳送HTTP請求wgetHTTP
- DB2 匯入和匯出 命令列和客戶端匯出DB2命令列客戶端
- YouTube Vanced: 替代YouTube官方Android客戶端Android客戶端
- SpringBoot中HTTP高效能客戶端實現Spring BootHTTP客戶端
- HTTP 客戶端:RestClient、WebClient、RestTemplateHTTP客戶端RESTclientWeb
- HTTP客戶端框架之RetrofitHTTP客戶端框架
- SQLite 命令列客戶端 sqlite3 使用指南SQLite命令列客戶端
- Java HTTP 客戶端的比較 - reflectoringJavaHTTP客戶端
- ZooKeeper客戶端CRUD命令客戶端
- 譯文——OkHttp, 安卓和Java應用的HTTP&HTTP2.0客戶端HTTP安卓Java客戶端
- python爬蟲實踐: 豆瓣小組命令列客戶端Python爬蟲命令列客戶端
- Linux常用網路傳輸工具命令,ssh、curl、wget、scpLinuxwget
- C# HTTP實現斷點續傳客戶端和服務端C#HTTP斷點客戶端服務端
- 高效能 C++ HTTP 客戶端原理與實現C++HTTP客戶端
- 使用Netty實現HTTP2伺服器/客戶端的原始碼和教程 - BaeldungNettyHTTP伺服器客戶端原始碼
- curl與wget高階用法wget
- gout 新版本釋出,golang實現的http 流式客戶端GolangHTTP客戶端
- 在.NET 6 中如何建立和使用 HTTP 客戶端 SDKHTTP客戶端
- 高效能 HTTP 客戶端 undici 初探HTTP客戶端
- Clickhouse-客戶端查詢命令客戶端
- 通過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- 通過命令列在Python中測試以太坊RPC客戶端命令列PythonRPC客戶端
- 透過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- netty系列之:自建客戶端和HTTP伺服器互動Netty客戶端HTTP伺服器
- reqwest:簡單而強大的 Rust HTTP 客戶端RustHTTP客戶端
- redis:常用客戶端命令(redis-cli)Redis客戶端
- zookeeper在Linux客戶端操作命令大全Linux客戶端
- Asp .Net Core 系列:整合 Refit 和 RestEase 宣告式 HTTP 客戶端庫RESTHTTP客戶端
- Dino:一個有著現代外觀的開源 XMPP 客戶端客戶端
- HTML轉PDF的純客戶端和純服務端實現方案HTML客戶端服務端
- 網頁SSH客戶端的實現網頁客戶端
- Redis的Pub/Sub客戶端實現Redis客戶端