新聞中心
HTTPie 是一個(gè)命令行 HTTP 客戶端。它的目標(biāo)是使 CLI 與 Web 服務(wù)的交互盡可能人性化。HTTPie 設(shè)計(jì)用于測(cè)試、調(diào)試以及通常與 API 和 HTTP 服務(wù)器交互。http 和 https 的命令允許創(chuàng)建和發(fā)送任意 HTTP 請(qǐng)求。HTTPie 整體采用簡(jiǎn)單自然的語(yǔ)法,并提供格式化和彩色輸出。

創(chuàng)新互聯(lián)建站專注于巨野企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開(kāi)發(fā)。巨野網(wǎng)站建設(shè)公司,為巨野等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
主要特點(diǎn)
- 富有表現(xiàn)力和直觀的語(yǔ)法
- 格式化和彩色終端輸出
- 內(nèi)置 JSON 支持
- 表格和文件上傳
- HTTPS、代理和身份驗(yàn)證
- 任意請(qǐng)求數(shù)據(jù)
- 自定義標(biāo)題
- 持續(xù)Sessions
- 類似 Wget 的下載
- Linux、macOS、Windows 和 FreeBSD 支持
- 插件
- 文檔
- 測(cè)試覆蓋率
安裝
macOS
Homebrew
安裝 Homebrew 可以看它的安裝教程[1].
安裝 httpie
brew update
brew install httpie
升級(jí) httpie
brew update
brew upgrade httpie
Windows
Chocolatey
安裝 Chocolatey 可以看它的 安裝教程[2].
安裝 httpie
choco install httpie
升級(jí) httpie
choco upgrade httpie
Linux
Snapcraft (Linux)
安裝 Snapcraft 可以看它的 安裝教程[3].
安裝 httpie
snap install httpie
升級(jí) httpie
snap refresh httpie
Debian and Ubuntu
也適用于其他 Debian 衍生發(fā)行版,如 MX Linux、Linux Mint、deepin、Pop!_OS、KDE neon、Zorin OS、elementary OS、Kubuntu、Devuan、Linux Lite、Peppermint OS、Lubuntu、antiX、Xubuntu 等。
安裝 httpie
apt update
apt install httpie
升級(jí) httpie
apt update
apt upgrade httpie
FreeBSD
安裝 httpie
pkg install www/py-httpie
升級(jí) httpie
pkg upgrade www/py-httpie
安裝測(cè)試版本
大家還可以直接從masterGitHub 上的分支安裝最新的未發(fā)布開(kāi)發(fā)版本。它是未來(lái)穩(wěn)定版本的正在進(jìn)行中的工作,因此體驗(yàn)可能不會(huì)那么順利。
大家可以使用以下命令在 Linux、macOS、Windows 或 FreeBSD 上安裝pip:
python -m pip install --upgrade https://github.com/httpie/httpie/archive/master.tar.gz
或者在 macOS 和 Linux 上,使用 Homebrew:
brew uninstall --force httpie
brew install --HEAD httpie
甚至在 macOS 和 Linux 上,使用 Snapcraft:
snap remove httpie
snap install httpie --edge
驗(yàn)證是否擁有帶有后綴的當(dāng)前開(kāi)發(fā)版本標(biāo)識(shí)符.dev0,例如:
http --version
#3.0.3.dev0
用法
Hello World:
https httpie.io/hello
獲取用法:
http [flags] [METHOD] URL [ITEM [ITEM]]
http --help
舉例
自定義HTTP 方法、HTTP Header和JSON數(shù)據(jù):
http PUT pie.dev/put X-API-Token:123 name=John
提交 forms:
http -f POST pie.dev/post hello=World
查看使用輸出選項(xiàng)之一發(fā)送的請(qǐng)求:
http -v pie.dev/get
在不發(fā)送的情況下通過(guò)使用離線模式構(gòu)建和打印請(qǐng)求:
http --offline pie.dev/post hello=offline
使用重定向上傳文件:
http pie.dev/post < files/data.json
下載文件并通過(guò)重定向輸出保存:
http pie.dev/image/png > image.png
使用命名Sessions使對(duì)同一主機(jī)的請(qǐng)求之間的通信的某些方面保持持久:
http --session=logged-in -a username:password pie.dev/get API-Key:123
http --session=logged-in pie.dev/headers
設(shè)置自定義Host Header以解決丟失的 DNS 記錄:
http localhost:8000 Host:example.com
HTTP方法
HTTP 方法的名稱就在 URL 參數(shù)之前:
http DELETE pie.dev/delete
這看起來(lái)與發(fā)送的實(shí)際相似Request-Line:
DELETE /delete HTTP/1.1
除了標(biāo)準(zhǔn)方法(GET、POST、HEAD、PUT、PATCH、DELETE等)之外,還可以使用自定義方法名稱,例如:
http AHOY pie.dev/post
對(duì)于請(qǐng)求方法可以包含正文沒(méi)有任何限制,發(fā)送一個(gè)空POST請(qǐng)求:
http POST pie.dev/post
還可以發(fā)出GET包含正文的請(qǐng)求:
http GET pie.dev/get hello=world
可選GET和POST
該METHOD參數(shù)是可選的,當(dāng)你不指定它時(shí),HTTPie 默認(rèn)為:
- GET: 對(duì)于沒(méi)有正文的請(qǐng)求
- POST: 對(duì)于帶有正文的請(qǐng)求
這里我們沒(méi)有指定任何請(qǐng)求數(shù)據(jù),所以兩個(gè)命令將發(fā)送相同的GET請(qǐng)求:
http GET pie.dev/get
http pie.dev/get
另一方面,我們可以通過(guò)兩個(gè)命令將發(fā)出相同的POST請(qǐng)求:
http pie.dev/post hello=world
請(qǐng)求網(wǎng)址
HTTPie 執(zhí)行請(qǐng)求所需的唯一信息是 URL。
默認(rèn)方案是http://并且可以從參數(shù)中省略:
http example.org
#→ http://example.org
HTTPie 還安裝了一個(gè)https可執(zhí)行文件,其中默認(rèn)方案是https://:
https example.org
#→ https://example.org
當(dāng)把 URL 粘貼到終端時(shí),甚至可以保留://URL 參數(shù)中的位,以將 URL 快速轉(zhuǎn)換為 HTTPie 調(diào)用,只需在協(xié)議名稱后添加一個(gè)空格即可。
https ://example.org #→ https://example.org
網(wǎng)址快捷方式localhost
支持類似 curl 的 localhost 簡(jiǎn)寫。這意味著,例如,:3000將擴(kuò)展為http://localhost:3000 如果省略端口,則假定端口 80。
http :/foo
GET /foo HTTP/1.1
Host: localhost
http :3000/bar
GET /bar HTTP/1.1
Host: localhost:3000
http :
GET / HTTP/1.1
Host: localhost
JSON
JSON 是現(xiàn)代 Web 服務(wù)的通用語(yǔ),也是HTTPie 默認(rèn)使用的隱式內(nèi)容類型。
簡(jiǎn)單的例子:
http PUT pie.dev/put name=John email=john@example.org
PUT / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Host: pie.dev
{
"name": "John",
"email": "john@example.org"
}
默認(rèn)行為
如果命令中包含一些數(shù)據(jù)請(qǐng)求項(xiàng),則默認(rèn)將它們序列化為 JSON 對(duì)象。HTTPie 還自動(dòng)設(shè)置以下Header,這兩個(gè)Header都可以被覆蓋:
Content-Type : application/json
Accept : application/json, /;q=0.5
顯式 JSON
無(wú)論是否正在發(fā)送數(shù)據(jù),都可以使用--json, -j顯式設(shè)置Accept為(這是通過(guò)通常的Header符號(hào)設(shè)置Header的快捷方式:) 。此外,即使響應(yīng)不正確或未知,HTTPie 也會(huì)嘗試檢測(cè) JSON 響應(yīng)。application/jsonhttp url Accept:'application/json, /;q=0.5'Content-Typetext/plain
非字符串 JSON 字段
非字符串 JSON 字段使用:=分隔符,它允許將任意 JSON 數(shù)據(jù)嵌入到生成的 JSON 對(duì)象中。此外,文本和原始 JSON 文件也可以使用=@和嵌入到字段中:=@:
http PUT pie.dev/put \
name=John \ # String (default)
age:=29 \ # Raw JSON — Number
married:=false \ # Raw JSON — Boolean
hobbies:='["http", "pies"]' \ # Raw JSON — Array
favorite:='{"tool": "HTTPie"}' \ # Raw JSON — Object
bookmarks:=@files/data.json \ # Embed JSON file
description=@files/text.txt # Embed text file
PUT /person/1 HTTP/1.1
Accept: application/json, */*;q=0.5
Content-Type: application/json
Host: pie.dev
{
"age": 29,
"hobbies": [
"http",
"pies"
],
"description": "John is a nice guy who likes pies.",
"married": false,
"name": "John",
"favorite": {
"tool": "HTTPie"
},
"bookmarks": {
"HTTPie": "https://httpie.org",
}
}
:=/:=@語(yǔ)法是 JSON 特定的。大家可以將請(qǐng)求切換為--formor --multipart,并且字符串、浮點(diǎn)數(shù)和數(shù)字值將繼續(xù)被序列化(作為字符串形式的值)。但是,其他 JSON 類型不允許使用--form或--multipart。
形式
提交表單與發(fā)送JSON請(qǐng)求非常相似。通常唯一的區(qū)別是添加--form, -f選項(xiàng),它確保數(shù)據(jù)字段被序列化為,并Content-Type設(shè)置為application/x-www-form-urlencoded; charset=utf-8. 可以通過(guò)配置文件使表單數(shù)據(jù)成為隱式內(nèi)容類型而不是 JSON。
常規(guī)表格
http --form POST pie.dev/post name='John Smith'
POST /post HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
name=John+Smith
文件上傳表格
如果存在一個(gè)或多個(gè)文件字段,則序列化和內(nèi)容類型為multipart/form-data:
http -f POST pie.dev/post name='John Smith' cv@~/files/data.xml
上面的請(qǐng)求與提交以下 HTML 表單相同:
請(qǐng)注意,@它用于模擬文件上傳表單字段,而=@只是將文件內(nèi)容嵌入為常規(guī)文本字段值。
上傳文件時(shí),它們的內(nèi)容類型是從文件名中推斷出來(lái)的。大家可以手動(dòng)覆蓋推斷的內(nèi)容類型:
http -f POST pie.dev/post name='John Smith' cv@'~/files/data.bin;type=application/pdf'
multipart/form-data即使沒(méi)有任何文件也要執(zhí)行請(qǐng)求,請(qǐng)使用--multipart代替--form:
http --multipart --offline example.org hello=world
POST / HTTP/1.1
Content-Length: 129
Content-Type: multipart/form-data; boundary=c31279ab254f40aeb06df32b433cbccb
Host: example.org
--c31279ab254f40aeb06df32b433cbccb
Content-Disposition: form-data; name="hello"
world
--c31279ab254f40aeb06df32b433cbccb--
文件上傳總是流式傳輸以避免大文件的內(nèi)存問(wèn)題。
默認(rèn)情況下,HTTPie 使用隨機(jī)唯一字符串作為多部分邊界,但大家可以使用它--boundary來(lái)指定自定義字符串:
http --form --multipart --offline example.org hello=world Content-Type:multipart/letter
POST / HTTP/1.1
Content-Length: 129
Content-Type: multipart/letter; boundary=c31279ab254f40aeb06df32b433cbccb
Host: example.org
--c31279ab254f40aeb06df32b433cbccb
Content-Disposition: form-data; name="hello"
world
--c31279ab254f40aeb06df32b433cbccb--
如果指定自定義Content-Type Header而不包括邊界位,HTTPie 將自動(dòng)將邊界值(顯式指定或自動(dòng)生成)添加到 Headers:
http --form --multipart --offline example.org hello=world Content-Type:multipart/letter
POST / HTTP/1.1
Content-Length: 129
Content-Type: multipart/letter; boundary=c31279ab254f40aeb06df32b433cbccb
Host: example.org
--c31279ab254f40aeb06df32b433cbccb
Content-Disposition: form-data; name="hello"
world
--c31279ab254f40aeb06df32b433cbccb--
HTTP Headers
要設(shè)置自定義 Headers,可以通過(guò)使用以下Header:Value符號(hào):
http pie.dev/headers User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' \
X-Foo:Bar Referer:https://httpie.org/
GET /headers HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Cookie: valued-visitor=yes;foo=bar
Host: pie.dev
Referer: https://httpie.org/
User-Agent: Bacon/1.0
X-Foo: Bar
默認(rèn)請(qǐng)求headers
HTTPie 設(shè)置了幾個(gè)默認(rèn)Header:
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: HTTPie/
Host:
其中任何一個(gè)都可以被覆蓋,其中一些可以取消設(shè)置(見(jiàn)下文)。
具有相同名稱的多個(gè)Header Value
如果請(qǐng)求是使用共享相同名稱的多個(gè)Header發(fā)送的,則 HTTPie 將單獨(dú)發(fā)送它們。
http --offline example.org Cookie:one Cookie:two
GET / HTTP/1.1
Cookie: one
Cookie: two
也可以傳遞單個(gè)header value pair,其中值是Header Value的逗號(hào)分隔列表。然后客戶端會(huì)將其作為單個(gè)header發(fā)送。
http --offline example.org Numbers:one,two
GET / HTTP/1.1
Numbers: one,two
另外,如果當(dāng)前Sessions包含任何header,則它們將在發(fā)送請(qǐng)求時(shí)被單獨(dú)的命令覆蓋,而不是被連接在一起。
限制響應(yīng)Header
這些--max-headers=n選項(xiàng)允許控制 HTTPie 在放棄之前讀取的Header數(shù)量(默認(rèn)值0,即沒(méi)有限制)。
http --max-headers=100 pie.dev/get
Cookies
HTTP 客戶端將 cookie 作為常規(guī)HTTP Header發(fā)送到服務(wù)器。這意味著,HTTPie 不提供任何用于指定 cookie 的特殊語(yǔ)法——使用通常的Header:Value符號(hào):
發(fā)送一個(gè) cookie:
http pie.dev/cookies Cookie:sessionid=foo
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: sessionid=foo
Host: pie.dev
User-Agent: HTTPie/0.9.9
發(fā)送多個(gè) cookie(注意:header被引用以防止 shell 解釋;):
http pie.dev/cookies 'Cookie:sessionid=foo;another-cookie=bar'
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: sessionid=foo;another-cookie=bar
Host: pie.dev
User-Agent: HTTPie/0.9.9
HTTPS
服務(wù)器 SSL 證書驗(yàn)證
跳過(guò)主機(jī)的 SSL 證書驗(yàn)證,可以通過(guò)--verify=no(默認(rèn)為yes):
http --verify=no https://pie.dev/get
自定義 CA 包
大家還可以使用--verify=設(shè)置自定義 CA 包路徑:
http --verify=/ssl/custom_ca_bundle https://example.org
客戶端 SSL 證書
要將客戶端證書用于 SSL 通信,可以使用以下命令傳遞證書文件的路徑--cert:
http --cert=client.pem https://example.org
如果私鑰不包含在證書文件中,大家可以通過(guò)以下方式傳遞密鑰文件的路徑--cert-key:
http --cert=client.crt --cert-key=client.key https://example.org
SSL 版本
使用該--ssl=選項(xiàng)指定要使用的所需協(xié)議版本。這將默認(rèn)為 SSL v2.3,它將協(xié)商服務(wù)器和安裝的 OpenSSL 支持的最高協(xié)議??捎玫膮f(xié)議是ssl2.3, ssl3, tls1, tls1.1, tls1.2, tls1.3. (實(shí)際可用的協(xié)議集可能因 OpenSSL 安裝而異。)
#Specify the vulnerable SSL v3 protocol to talk to an outdated server:
http --ssl=ssl3 https://vulnerable.example.org
SSL 密碼
可以使用 指定可用的密碼--ciphers。它應(yīng)該是OpenSSL 密碼列表格式的字符串。
#Specify the vulnerable SSL v3 protocol to talk to an outdated server:
http --ssl=ssl3 https://vulnerable.example.org
Sessions
默認(rèn)情況下,HTTPie 發(fā)出的每個(gè)請(qǐng)求都完全獨(dú)立于同一主機(jī)之前的任何請(qǐng)求。
但是,HTTPie 也通過(guò)該--session=SESSION_NAME_OR_PATH選項(xiàng)支持持久Sessions。在Sessions中,自定義HTTP Header Content-(以or開(kāi)頭的Header除外If-)、身份驗(yàn)證和cookie(手動(dòng)指定或由服務(wù)器發(fā)送)在對(duì)同一主機(jī)的請(qǐng)求之間持續(xù)存在。
#Create a new session:
http --session=./session.json pie.dev/headers API-Token:123
#Inspect / edit the generated session file: cat session.json
#Re-use the existing session — the API-Token header will be set:
http --session=./session.json pie.dev/headers
所有Session數(shù)據(jù),包括憑據(jù)、提示密碼、cookie 數(shù)據(jù)和自定義header都以純文本形式存儲(chǔ)。這意味著Sessions文件也可以在文本編輯器中手動(dòng)創(chuàng)建和編輯——它們是常規(guī)的 JSON。這也意味著任何有權(quán)訪問(wèn)Session文件的人都可以讀取它們。
命名Sessions
大家可以為每個(gè)主機(jī)創(chuàng)建一個(gè)或多個(gè)命名Sessions。例如,可以通過(guò)以下方式創(chuàng)建一個(gè)名為user1for的新Sessions pie.dev:
http --session=user1 -a user1:password pie.dev/get X-Foo:Bar
user1從現(xiàn)在開(kāi)始,可以通過(guò)名稱 ( )來(lái)引用Sessions。當(dāng)選擇再次使用Sessions時(shí),將自動(dòng)設(shè)置所有先前指定的身份驗(yàn)證或 HTTP header:
http --session=user1 pie.dev/get
要?jiǎng)?chuàng)建或重用不同的Sessions,只需指定不同的名稱:
http --session=user2 -a user2:password pie.dev/get X-Bar:Foo
命名Sessions的數(shù)據(jù)存儲(chǔ)在配置sessions目錄子目錄內(nèi)的 JSON 文件中,通常(在 Windows 上)。~/.config/httpie/sessions//.json%APPDATA%\httpie\sessions.json
如果大家在 Unix 機(jī)器上執(zhí)行了上述命令,應(yīng)該能夠使用以下命令列出生成的Sessions文件:
ls -l ~/.config/httpie/sessions/pie.dev
匿名Session
可以直接指定Sessions文件的路徑,而不是為其命名。這允許跨多個(gè)主機(jī)重復(fù)使用Session:
#Create a session:
http --session=/tmp/session.json example.org
#Use the session to make a request to another host:
http --session=/tmp/session.json admin.example.org
#You can also refer to a previously created named session:
http --session=~/.config/httpie/sessions/another.example.org/test.json example.org
在創(chuàng)建匿名Sessions時(shí),請(qǐng)記住始終包含至少一個(gè)/,即使Sessions文件位于當(dāng)前目錄中(即--session=./session.json,而不是只是--session=session.json),否則 HTTPie 會(huì)采用命名Sessions。
只讀Sessions
要在創(chuàng)建后使用原始Sessions文件而不從請(qǐng)求/響應(yīng)交換中更新它,請(qǐng)指定Sessions名稱 via --session-read-only=SESSION_NAME_OR_PATH。
#If the session file doesn’t exist, then it is created:
http --session-read-only=./ro-session.json pie.dev/headers Custom-Header:orig-value
#But it is not updated:
http --session-read-only=./ro-session.json pie.dev/headers Custom-Header:new-value
參考資料
[1]安裝教程: https://docs.brew.sh/Installation
[2]安裝教程: https://chocolatey.org/install[3]安裝教程: https://snapcraft.io/docs/installing-snapd
網(wǎng)站題目:分享一個(gè)巨好用的 HTTP命令行寶藏工具
轉(zhuǎn)載來(lái)源:http://www.dlmjj.cn/article/djhjcco.html


咨詢
建站咨詢
