HTTPie
GitHub概要
httpie/cli
🥧 HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more.
トピックス
スター履歴
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"
]
}