メインコンテンツへスキップ

HTTPieとは

·
学習・作業ログ
目次

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.0 vs HTTPie/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の違いは?

参考
#