使用 httpie 替代 curl
shell curl http -> sudo snap install httpie
> httpie --version
Why
curl
非常強大,但要記的參數太多。試試更簡單的 httpie
。
What
- httpie
-
httpie 一個簡單但功能強大的 HTTP 和 API 測試命令列,可替代
curl
。
How
安裝在 Debian and Ubuntu
> sudo apt install -y gnupg2
> sudo curl -SsL https://packages.httpie.io/deb/KEY.gpg | sudo apt-key add -
> sudo curl -SsL -o /etc/apt/sources.list.d/httpie.list https://packages.httpie.io/deb/httpie.list
> sudo apt update
> sudo apt -y update
> sudo apt install httpie
用法範例
簡單的用法
> http hokang.info/ping
//
// HTTP/1.1 200 OK
// access-control-allow-origin: *
// content-length: 22
// content-type: application/json; charset=utf-8
//
// {
// "ip": "34.81.216.209"
// }
//
// vs curl
//
> curl http://hokang.info/ping
//
// {"ip":"34.81.216.209"}
//
httpie
可以使用 http
指令來建立 http request
;用 https
指令來 https request
。而 curl
則須將 protocol
放在 ://
之前來使用。
並且如果 response
是 json
格式時,會自動將其格式化為更清晰的輸出。
get 參數的用法
> http pie.dev/get hello==world // (1)
// "url": "http://pie.dev/get?hello=world"
//
// http GET pie.dev/get hello=world // (2)
// "url": "http://pie.dev/get"
-
使用
param==value
會將其編碼後放入查詢字串中 -
使用
param=value
會是放入 body 中,所以內定是POST
方法。所以這裡需要特定指示以GET
發出請求。
你也能將查詢字串和指定參數混用,`httpie`會自動將它合併。
> http pie.dev/get?hi=man hello==world
// "url": "http://pie.dev/get?hi=man&hello=world"
所以雖然雞肋,但在不指定 request
方法時,可以用 param=value
使用 POST
方法;以 param==value
使用 GET
方法。
如果在參數中有特殊的字元,例如 $
,請使用單引號將她包括起來,注意不要用雙引號。
> http pie.dev/get '$hello==world'
// "url": "http://pie.dev/get?%24hello=world"
// 使用雙引號會得到錯誤的結果
> http pie.dev/get "$hello==world"
// "url": "http://pie.dev/get?=world"
附加檔頭
使用 :
分隔鍵值,若要將某鍵設為空字串值則使用 ;
結束。
> http pie.dev/headers 'User-Agent: hokang'
// "User-Agent": "hokang"
> http pie.dev/headers 'User-Agent;'
// "User-Agent": ""
// error
> http pie.dev/headers 'User-Agent:'
// User-Agent 會被刪除
忽略 ssl 檢查
> https --verify=no pie.dev/get
// curl
> curl -k pie.dev/get
or
> curl --insecure pie.dev/get
使用 proxy
> http --proxy=http:socks5://user:pass@host:port pie.dev/get
--proxy
的第一個為通訊協議,第二個 proxy 協議。
http:socks5:
代表使用 http 連線但使用的是 socks5 proxy server。
http:http:
代表使用 http 連線但使用的是 http proxy server。
其他組合同理。 也可以設定環境參數來使用 proxy 。
export HTTP_PROXY=<proxy protocol>://<proxy ip>:<proxy port>
export HTTPS_PROXY=<proxy protocol>://<proxy ip>:<proxy port>
or
export ALL_PROXY=<proxy protocol>://<proxy ip>:<proxy port>
如果出現下列錯誤,
http: error: InvalidSchema: Missing dependencies for SOCKS support.
請安裝 python
的 socks
模組
> sudo pip install pysocks
other
更多用法,請參考 request-items