Httpieとは?#
人間のためのHTTPクライアント
curlがHTTPを含む多数のプロトコルに対応する汎用ツールであるのに対し、
HTTPieはHTTP/HTTPSに特化することで、構文と出力の使いやすさを追求している。
主な特徴は下記
- シンタックスハイライト付きの標準出力
- JSONデータのビルトインサポート
- 永続的なセッションの管理
HTTPieのインストール方法#
# Debian、Ubuntuなどの場合
apt-get install httpie
基本的な使い方#
# GETリクエスト(メソッド省略可)
http httpie.org
# ヘッダー付きPOST
http POST http://httpbin.org/post X-API-Token:123 name=John
JSONデータの送信#
:= 記法で数値やブール値を正しい型で送信できる。
http POST http://httpbin.org/post \
name=John \ # 文字列(=)
age:=29 \ # 数値(:=)
married:=false # ブール値(:=)
| 記号 | 意味 | 例 |
|---|---|---|
: | HTTPヘッダー | X-API-Token:123 |
= | 文字列データフィールド | name=John |
:= | 非文字列(数値/bool/配列) | age:=29 |
== | URLクエリパラメータ | q==search |
@ | ファイルアップロード | file@photo.jpg |
ハンズオン#
% http POST http://httpbin.org/post name=John age:=29 married:=false
レスポンスのjsonフィールドで型が正しく変換されていることを確認:
"json": {
"age": 29,
"married": false,
"name": "John"
}
セッション管理#
HTTPはステートレスなので、連続したAPI呼び出しで認証状態を保つにはクライアント側でCookieやトークンを管理する必要がある。HTTPieのセッション機能はこれをコマンドラインレベルで解決する。
# セッションを作成してログイン
http --session=myapi POST api.example.com/login username=john password=secret
# 同じセッション名で呼び出すと、Cookieやヘッダーが自動的に引き継がれる
http --session=myapi GET api.example.com/profile
便利なオプション#
--print オプションで出力内容を制御できる。デバッグで頻繁に使う。
| オプション | 出力内容 |
|---|---|
-v | 全部表示(リクエスト+レスポンス) |
-h | レスポンスヘッダーのみ |
-b | ボディのみ |
curlとの比較#
HTTPieの場合、シンタックスハイライトがつく。また、構文がより直感的。
# curl(JSONを送る場合)
curl -X POST -H "Content-Type: application/json" -d '{"name":"John"}' http://example.com
# HTTPie(より直感的)
http POST http://example.com name=John
出力の違い#
下記の出力を比較すると、以下の違いがわかる:
- HTTPieはレスポンスヘッダー+ボディを両方表示(curlはデフォルトでボディのみ)
- User-Agentが異なる(
curl/8.5.0vsHTTPie/3.2.2) - HTTPieは
Accept-Encoding: gzip, deflateを自動付与(通信効率の最適化)
curl:
% curl -X POST http://httpbin.org/post
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/8.5.0"
},
"json": null,
"url": "http://httpbin.org/post"
}
HTTPie:
% http POST http://httpbin.org/post
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Content-Type: application/json
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "HTTPie/3.2.2"
},
"json": null,
"url": "http://httpbin.org/post"
}
振り返りポイント#
- HTTPieとは?
- HTTPieとcurlの違いは?