HTTPie

GitHub概要

httpie/cli

🥧 HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more.

ホームページ:https://httpie.io
スター36,082
ウォッチ89
フォーク3,748
作成日:2012年2月25日
言語:Python
ライセンス:BSD 3-Clause "New" or "Revised" License

トピックス

apiapi-clientapi-testingcliclientcurldebuggingdeveloper-toolsdevelopmentdevopshttphttp-clienthttpiejsonpythonrestrest-apiterminalusabilityweb

スター履歴

httpie/cli Star History
データ取得日時: 2025/7/17 02:30

API開発ツール

HTTPie

概要

HTTPie(エイチティーティーパイ)は、人間にフレンドリーなコマンドラインHTTPクライアントです。直感的な構文とJSON対応により、cURLの現代的な代替ツールとして開発者に愛用されています。美しい出力フォーマット、豊富な認証サポート、そして分かりやすい文法により、API開発における生産性を大幅に向上させます。

詳細

HTTPieは、API時代に適したモダンなコマンドラインHTTPクライアントとして設計されました。cURLと比較して、人間が読みやすく書きやすい構文を採用し、HTTPリクエストの作成を直感的にします。http GET example.comのようなシンプルな構文から、http PUT api.example.com X-API-Token:123 name=Johnのような複雑なリクエストまで、自然な言語に近い表現でHTTPリクエストを構築できます。JSONサポートが標準で組み込まれており、name=value形式でデータを指定すると自動的にJSONオブジェクトに変換されます。認証機能では、Basic認証、Digest認証、Bearer Token、OAuth 2.0まで幅広く対応し、.netrcファイルからの自動認証読み込みも可能です。セッション機能により、認証情報やヘッダーを永続化でき、連続したAPIテストでの効率性を提供します。出力は美しいカラー表示とフォーマット機能により、レスポンスの確認が容易です。プラグインシステムにより機能拡張も可能で、CI/CDパイプラインやスクリプトでの利用にも適しています。

メリット・デメリット

メリット

  • 人間フレンドリー: 自然言語に近い直感的な構文
  • JSON標準対応: 自動的なJSON変換と美しい出力
  • 豊富な認証: Basic、Digest、Bearer、OAuth 2.0対応
  • セッション管理: 認証情報とヘッダーの永続化
  • 美しい出力: カラー表示と見やすいフォーマット
  • 拡張性: プラグインシステムによる機能拡張
  • クロスプラットフォーム: Windows、macOS、Linux対応
  • オープンソース: 無料で利用可能、積極的なコミュニティ

デメリット

  • GUI不足: コマンドライン専用でGUIは提供されない
  • 学習コスト: コマンドライン操作に慣れていない場合
  • バイナリ制限: バイナリデータの扱いにやや制限
  • 複雑操作: 非常に複雑なAPIテストには機能制限

参考ページ

書き方の例

基本的なHTTPリクエスト

# 基本的なGETリクエスト
http GET httpie.io/hello

# シンプルなGET(httpメソッドは省略可能)
http httpie.io/hello

# POSTリクエストでJSONデータ送信
http POST pie.dev/post name=John [email protected] age:=30

# PUTリクエストとカスタムヘッダー
http PUT pie.dev/put X-API-Token:123 name=John active:=true

# DELETEリクエスト
http DELETE pie.dev/delete/123 Authorization:"Bearer token123"

JSONデータと型指定

# 文字列データ(デフォルト)
http POST pie.dev/post name=John department=engineering

# 数値データ(:= を使用)
http POST pie.dev/post name=John age:=30 salary:=50000

# ブール値
http POST pie.dev/post name=John active:=true married:=false

# 配列
http POST pie.dev/post name=John skills:='["JavaScript", "Python", "React"]'

# オブジェクト
http POST pie.dev/post name=John address:='{"city": "Tokyo", "country": "Japan"}'

# 複雑なネストされたJSON
http POST pie.dev/post \
  platform[name]=HTTPie \
  platform[about][mission]='Make APIs simple and intuitive' \
  platform[about][stars]:=54000 \
  platform[apps][]=Terminal \
  platform[apps][]=Desktop \
  platform[apps][]=Web

認証方法

# Basic認証
http -a username:password pie.dev/basic-auth/username/password

# パスワード入力プロンプト
http -a username pie.dev/basic-auth/username/password

# Digest認証
http -A digest -a username:password pie.dev/digest-auth/username/password

# Bearer Token認証
http -A bearer -a token123 pie.dev/bearer

# カスタムヘッダーでAPIキー
http GET api.example.com X-API-Key:your-api-key-here

# .netrcファイルから自動認証
# ~/.netrc に設定された認証情報を自動使用
http pie.dev/basic-auth/httpie/test

# .netrcファイルを無視
http --ignore-netrc pie.dev/basic-auth/httpie/test

ヘッダーとクエリパラメータ

# カスタムヘッダーの設定
http pie.dev/headers \
  User-Agent:MyApp/1.0 \
  'Cookie:session=abc123;user=john' \
  X-Custom-Header:value \
  Accept:application/json

# クエリパラメータ(== を使用)
http GET api.github.com/search/repositories \
  q==httpie \
  per_page==5 \
  sort==stars

# パス内のパラメータ
http GET api.example.com/users/123/posts page==2 limit==10

# 複数の同名パラメータ
http GET api.example.com/search \
  tag==python \
  tag==api \
  tag==cli

ファイル操作

# ファイルアップロード(multipart/form-data)
http -f POST pie.dev/post \
  file@/path/to/file.txt \
  description="アップロードテスト"

# JSONファイルをリクエストボディとして送信
http POST pie.dev/post < data.json

# ファイルからヘッダー値を読み込み
http POST pie.dev/post \
  X-Token:@token.txt \
  Content:@content.txt

# レスポンスをファイルに保存
http GET api.example.com/data > response.json

# バイナリファイルの送信
http POST pie.dev/upload \
  Content-Type:image/png \
  < image.png

セッション管理

# 新しいセッションを作成
http --session=./api-session.json pie.dev/headers \
  API-Token:123 \
  User-Agent:MyApp/1.0

# セッションファイルの確認
cat api-session.json

# 既存セッションを再利用(認証とヘッダーが自動適用)
http --session=./api-session.json pie.dev/get

# 名前付きセッション(ホスト別に管理)
http --session=user1 -a user1:password pie.dev/login

# 名前付きセッションの再利用
http --session=user1 pie.dev/profile

# セッションファイルの場所確認
ls -la ~/.config/httpie/sessions/pie.dev/

高度な機能

# オフラインモード(リクエストのみ構築、送信しない)
http --offline --print=HhBb pie.dev/post name=John

# ストリーミングレスポンス
http --stream pie.dev/stream/10

# プロキシ設定
http --proxy=http:http://proxy.example.com:8080 example.org

# SOCKS5プロキシ
http --proxy=http:socks5://user:pass@proxy:1080 example.org

# SSL証明書検証をスキップ
http --verify=no https://self-signed.example.com

# カスタムCA証明書
http --verify=/path/to/ca-bundle.crt https://example.com

# クライアント証明書認証
http --cert=client.pem --cert-key=client.key https://secure.example.com

# 出力フォーマットのカスタマイズ
http --format-options json.sort_keys:false,json.indent:2 pie.dev/get

# 特定の出力のみ表示(H=ヘッダー, B=ボディ)
http --print=HB pie.dev/get

# JSONとCURLの両方の出力
http --print=HhBb pie.dev/post name=John

スクリプトとCI/CD統合

#!/bin/bash
# APIテストスクリプト例

# 環境変数の設定
export API_BASE="https://api.example.com"
export API_TOKEN="your-token-here"

# ログイン
LOGIN_RESPONSE=$(http POST $API_BASE/auth/login \
  username=testuser \
  password=testpass \
  --print=b)

TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')

# 認証付きAPIテスト
http GET $API_BASE/profile \
  Authorization:"Bearer $TOKEN" \
  --check-status \
  --ignore-stdin

# エラーハンドリング
if [ $? -ne 0 ]; then
  echo "API test failed"
  exit 1
fi

echo "API test passed"

# GitHub Actions での使用例
# - name: Test API
#   run: |
#     pip install httpie
#     http GET ${{ secrets.API_URL }}/health \
#       X-API-Key:${{ secrets.API_KEY }} \
#       --check-status

プラグインと拡張

# プラグインのインストール
httpie cli plugins install httpie-plugin-name

# インストール済みプラグインの確認
httpie cli plugins list

# プラグインのアンインストール
httpie cli plugins uninstall httpie-plugin-name

# HTTPie設定ファイルの場所
echo ~/.config/httpie/config.json

# デフォルトオプションの設定例
{
  "default_options": [
    "--style=fruity",
    "--print=HhBb"
  ]
}