The Issue of the Day Before

使用 httpie 替代 curl

shell -
> 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 放在 :// 之前來使用。

並且如果 responsejson 格式時,會自動將其格式化為更清晰的輸出。

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"
  1. 使用 param==value 會將其編碼後放入查詢字串中

  2. 使用 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.

請安裝 pythonsocks 模組

> sudo pip install pysocks

other

更多用法,請參考 request-items

閱讀在雲端