cURL GET, POST, PUT, DELETE:完全ガイド (2026年版)
ターミナルから cURL を使用して、あらゆる HTTP メソッドをマスターする
Hyperealで構築を始めよう
Kling、Flux、Sora、Veoなどに単一のAPIでアクセス。無料クレジットで開始、数百万規模まで拡張可能。
クレジットカード不要 • 10万人以上の開発者 • エンタープライズ対応
cURL GET, POST, PUT, DELETE: 2026年版完全ガイド
cURLは、HTTPリクエストを送信するための汎用的なコマンドラインツールです。macOSやほとんどのLinuxディストリビューションにプリインストールされており、Windowsでも簡単に利用できます。APIのテスト、Webhookのデバッグ、あるいはスクリプト内でのリクエスト自動化など、cURLは開発者が最初に手に取るツールです。
本ガイドでは、実務で頻繁に使用するすべてのHTTPメソッド(GET、POST、PUT、PATCH、DELETE)について、実用的な例、主要なフラグ、およびターミナルに直接コピーして使えるパターンを解説します。
クイックリファレンス表
| メソッド | cURLフラグ | 目的 | ボディの有無 |
|---|---|---|---|
| GET | デフォルト(不要) | データの取得 | なし |
| POST | -X POST または --data |
データの作成 | あり |
| PUT | -X PUT |
データの置換 | あり |
| PATCH | -X PATCH |
データの一部更新 | あり |
| DELETE | -X DELETE |
データの削除 | まれにあり |
| HEAD | -I または -X HEAD |
ヘッダーのみ取得 | なし |
| OPTIONS | -X OPTIONS |
許可されたメソッドの確認 | なし |
必須のcURLフラグ
具体的な例に入る前に、頻繁に使用するフラグを以下にまとめます。
# 一般的なフラグ
-X METHOD # HTTPメソッドの指定 (POST, PUT, DELETEなど)
-H "Header: Value" # リクエストヘッダーの追加
-d "data" # リクエストボディのデータを送信
-i # 出力にレスポンスヘッダーを含める
-v # 詳細モード (リクエスト/レスポンスの全容を表示)
-s # サイレントモード (プログレスバーを非表示)
-o filename # 出力をファイルに保存
-L # リダイレクトに従う
-k # 安全でないSSL接続を許可
-u user:pass # 基本認証 (Basic Auth)
-b "cookies" # クッキーの送信
-c cookie-file # クッキーをファイルに保存
--max-time 30 # 30秒後にタイムアウト
GETリクエスト
GETはデフォルトのメソッドです。-X GET を指定する必要はありません。
基本的なGET:
curl https://jsonplaceholder.typicode.com/posts/1
レスポンスヘッダーを含めたGET:
curl -i https://jsonplaceholder.typicode.com/posts/1
カスタムヘッダーを指定したGET:
curl -H "Accept: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
https://api.example.com/users
クエリパラメータ付きのGET:
# オプション 1: URLに含める
curl "https://api.example.com/search?q=hello&page=1&limit=10"
# オプション 2: -Gフラグと--data-urlencodeを使用する
curl -G \
--data-urlencode "q=hello world" \
--data-urlencode "page=1" \
https://api.example.com/search
レスポンスをファイルに保存するGET:
curl -o response.json https://api.example.com/data
詳細ログを出力するGET(デバッグに最適):
curl -v https://api.example.com/health
# 出力の例:
# > GET /health HTTP/2
# > Host: api.example.com
# > User-Agent: curl/8.x
# >
# < HTTP/2 200
# < content-type: application/json
# < ...
POSTリクエスト
POSTは、新しいリソースの作成やデータの送信に使用されます。
JSONボディを含めたPOST:
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{
"name": "Alice",
"email": "alice@example.com",
"role": "developer"
}'
フォームデータを送信するPOST:
curl -X POST https://api.example.com/login \
-d "username=alice&password=secret123"
注: -d を使用すると、明示的に上書きしない限り、cURLは自動的に Content-Type: application/x-www-form-urlencoded を設定します。
ファイルからデータを読み込むPOST:
# ファイルからJSONを読み込む
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d @payload.json
# 標準入力(stdin)から読み込む
echo '{"name": "Bob"}' | curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d @-
ファイルアップロード(マルチパートフォーム)を伴うPOST:
curl -X POST https://api.example.com/upload \
-F "file=@photo.jpg" \
-F "description=Profile photo" \
-F "userId=123"
複数ファイルを送信するPOST:
curl -X POST https://api.example.com/upload \
-F "files=@image1.jpg" \
-F "files=@image2.png" \
-F "files=@document.pdf"
PUTリクエスト
PUTはリソース全体を置換します。リクエストボディには、更新後の完全なリソースを含める必要があります。
リソースを更新するPUT:
curl -X PUT https://api.example.com/users/42 \
-H "Content-Type: application/json" \
-d '{
"name": "Alice Updated",
"email": "alice.new@example.com",
"role": "senior-developer"
}'
認証を伴うPUT:
curl -X PUT https://api.example.com/users/42 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-d '{
"name": "Alice Updated",
"email": "alice.new@example.com",
"role": "senior-developer"
}'
PATCHリクエスト
PATCHは、リソース全体を置換することなく、特定のフィールドのみを更新します。
特定のフィールドを更新するPATCH:
curl -X PATCH https://api.example.com/users/42 \
-H "Content-Type: application/json" \
-d '{
"role": "tech-lead"
}'
PUTとPATCHの比較:
# PUT: 完全なリソースを送信する必要がある
curl -X PUT https://api.example.com/users/42 \
-H "Content-Type: application/json" \
-d '{
"name": "Alice",
"email": "alice@example.com",
"role": "tech-lead",
"department": "engineering"
}'
# PATCH: 変更したい箇所だけを送信する
curl -X PATCH https://api.example.com/users/42 \
-H "Content-Type: application/json" \
-d '{"role": "tech-lead"}'
DELETEリクエスト
DELETEはリソースを削除します。ほとんどのDELETEリクエストはボディを必要としません。
シンプルなDELETE:
curl -X DELETE https://api.example.com/users/42
認証を伴うDELETE:
curl -X DELETE https://api.example.com/users/42 \
-H "Authorization: Bearer YOUR_TOKEN"
リクエストボディを伴うDELETE(一般的ではありません):
curl -X DELETE https://api.example.com/users/batch \
-H "Content-Type: application/json" \
-d '{"ids": [42, 43, 44]}'
DELETE後にレスポンスコードを確認する:
# -w はHTTPステータスコードを表示、-o /dev/null はボディを非表示にする
curl -X DELETE https://api.example.com/users/42 \
-H "Authorization: Bearer YOUR_TOKEN" \
-o /dev/null \
-w "HTTP Status: %{http_code}\n" \
-s
認証パターン
Bearerトークン (APIで最も一般的):
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
https://api.example.com/protected
基本認証 (Basic Auth):
# オプション 1: -u フラグを使用
curl -u username:password https://api.example.com/data
# オプション 2: ヘッダー (base64エンコード済み) を使用
curl -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
https://api.example.com/data
ヘッダーによるAPIキー認証:
curl -H "X-API-Key: your-api-key-here" \
https://api.example.com/data
クエリパラメータによるAPIキー認証:
curl "https://api.example.com/data?api_key=your-api-key-here"
実践的なAPI使用例
GitHub API
# リポジトリ一覧の取得
curl -H "Authorization: Bearer ghp_YOUR_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/user/repos
# 新しいリポジトリの作成
curl -X POST https://api.github.com/user/repos \
-H "Authorization: Bearer ghp_YOUR_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
-d '{
"name": "my-new-repo",
"private": true,
"description": "Created via cURL"
}'
OpenAI API
curl -X POST https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-YOUR_API_KEY" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
],
"max_tokens": 100
}'
Stripe API
# 顧客の作成
curl -X POST https://api.stripe.com/v1/customers \
-u sk_test_YOUR_KEY: \
-d "email=customer@example.com" \
-d "name=Jane Doe"
高度なパターン
Bashループによるエラー時のリトライ:
MAX_RETRIES=3
RETRY_COUNT=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://api.example.com/data)
if [ "$HTTP_CODE" -eq 200 ]; then
echo "Success"
curl -s https://api.example.com/data
break
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
echo "Attempt $RETRY_COUNT failed with $HTTP_CODE. Retrying..."
sleep $((RETRY_COUNT * 2))
done
レスポンス時間の計測:
curl -o /dev/null -s -w "
DNS Lookup: %{time_namelookup}s
Connect: %{time_connect}s
TLS Setup: %{time_appconnect}s
First Byte: %{time_starttransfer}s
Total Time: %{time_total}s
HTTP Code: %{http_code}
" https://api.example.com/health
リクエストの並列実行:
# xargsを使用して並列リクエストを送信
seq 1 10 | xargs -P 5 -I {} curl -s "https://api.example.com/item/{}"
よくある落とし穴と解決策
| 現象 | 原因 | 解決策 |
|---|---|---|
curl: (60) SSL certificate problem |
自己署名証明書 | -k フラグを追加 (開発時のみ) |
| JSONが送信されない | Content-Typeヘッダーの欠落 | -H "Content-Type: application/json" を追加 |
| データ内に特殊文字がある | シェルによる解釈 | シングルクォートを使用するかエスケープする |
| レスポンスが空 | サーバーが204を返している | -i を付けてステータスコードを確認 |
curl: (7) Failed to connect |
ポートまたはホストの間違い | URLとポートを再確認 |
まとめ
cURLは、APIを扱う開発者にとって不可欠なツールです。本ガイドで紹介したパターンは、シンプルなGETリクエストから、ファイルアップロードを伴う認証済みPOSTコールまで、実務上のユースケースの大部分を網羅しています。
画像生成、動画作成、音声合成などのAI APIを利用するアプリケーションを構築する場合、コードに組み込む前にcURLでプロトタイプ作成やAPIコールのテストを行うのが非常に効率的です。Hypereal AIは、多数のAIモデルに対してRESTful APIエンドポイントを提供しており、すべてのエンドポイントで上記のcURLパターンをそのまま活用できます。
