程序員專屬微信紅包封面1000個,兌換碼:dWK7fUs2WQG
cURL相信很多做開發的、運維的都不陌生,是非常有用的一個終端請求工具,藉助於它可以在命令行中進行HTTP、FTP等請求,在Linux系統中應用非常廣泛。但是它目前有一個缺陷,語法複雜,上手難度挺高的,甚至目前還不直接支持JSON參數請求。胖哥最近發現了另一個類似的工具httpie,一個非常簡單的HTTP命令行客戶端,甚至有點酷炫。
httpie
httpie是用Python寫的,支持的操作系統非常全面,上手非常快,胖哥看了5分鐘就能上手使用了。根據官方描述它的主要特點有:
- 語法簡單
- 支持格式化輸出和彩色樣式
- Windows、Linux、MacOS都支持
- 同時支持HTTP和HTTPS
- 支持文件上傳
- 支持持續會話保持
- 內置JSON支持,支持類似Wget下載
- 支持插件
VS cURL
既然用來對標cURL,我們來直觀地看看它們之間的差異
同一個的請求,cURL的參數項要多一些而且不能直觀理解,而httpie要人性化的多。
安裝
安裝方式這裏介紹四種。
PyPI
無視平臺,只要有Python3.7+環境即可。
# 安裝
pip install httpie
Windows
用以前胖哥推薦安裝的包管理器Chocolatey安裝。
# 安裝
choco install httpie
# 升級版本
choco upgrade httpie
MacOS
蘋果上應該沒有開發者不裝Homebrew的吧?
brew update
# 安裝
brew install httpie
# 升級版本
brew upgrade httpie
Linux
Linux可就多了,我們常用的Debian系,如Ubuntu
apt update
# 安裝
apt install httpie
# 升級版本
apt upgrade httpie
如果是紅帽系的話,自然是用yum:
yum install epel-release
# 安裝
yum install httpie
# 升級版本
yum upgrade httpie
當然Fedora也可能有人喜歡用,用dnf
命令試試,我不太確定。
用法
httpie用法很簡單,簡單到我懶得詳細寫說明,但是還是得寫一下。先來試試Hello World:
httpie命令的格式爲:
https|http [flags] [METHOD] URL [ITEM [ITEM]]
具體可以通過http --help
查詢細節。
請求方法
httpie的請求方法(http method)是可選的,httpie會自行判斷。
http pie.dev/get
除非你顯式聲明:
http POST pie.dev/get
而下面這個方法會被認爲是POST請求:
http pie.dev/post hello=world
因爲hello=world
會被認爲是請求體。那咋才認爲是GET
呢?
即使顯式聲明爲GET也不行! **正確的做法是把=
替換爲==
。
查詢字符串參數
爲什麼要=
替換爲==
?
https://api.github.com/search/repositories?q=httpie&per_page=1
上面是一個標準的API格式,在httpie中?
和&
都被空格替換,參數也不需要URL轉義,query參數鍵值對使用==
;請求體參數鍵值對使用=
。變爲:
http https://api.github.com/search/repositories q==httpie per_page==1
用文件固定參數
有些配置項,比如JWT Token,老長老長了,而且我還想複用咋辦?寫文件裏,然後用@
符號加路徑來引用文件裏的值:
http POST pie.dev/post \
Authentication:@files/jwt.txt # 從文件裏讀取請求頭
token==@files/text.txt # 從文件讀取query參數
name=@files/text.txt # 請求體參數
bookmarks:=@files/data.json # 從文件中嵌入請求體json數據
這種方式我覺得把一些配置動態化了,改文件裏的值就可以了。
請求頭用的
:
。
JSON
使用--json, -j
顯式設置請求Accept
爲application/json
,這個時候=
連接的鍵值對會被轉爲json
。
http -j PUT pie.dev/put name=felord age=18
驗證一下:
-v
是--verbose
的縮寫,可以打印請求細節。
如果不使用-j
的話, 就需要使用:=
來分隔鍵值對了,如果有文件引用還要加上@
。
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
實際請求體JSON爲:
{
"age": 29,
"bookmarks": {
"httpie": {
"says": "Hello, World!"
}
},
"description": "Hello, World!\n",
"favorite": {
"tool": "HTTPie"
},
"hobbies": [
"http",
"pies"
],
"married": false,
"name": "John"
}
這時候
=
和:=
是一樣的。
嵌套
嵌套的格式也挺好理解的。我覺得不需要過多描述,看下面的圖就能明白。
一些技巧
只需要下面這種方式就可以快捷請求
# https://baidu.com
https ://baidu.com
如果是localhost
,可以簡化爲:
# https://localhost:8080/yourapi
https :8080/yourapi
上傳下載:
http POST example.com/upload < ~/upload.pdf
http GET example.com/download.pdf > ~/download.pdf
# form 上傳
http -f POST example.com/form-with-file myUpload@~/example.pdf
另外
另外還有代理、插件等高級玩法,可玩性非常強,需要自己去摸索摸索,基於篇幅就不在贅述了。httpie其實還有UI客戶端,只不過目前在β測試階段,沒開放申請。
關注公衆號:Felordcn 獲取更多資訊