12k
All articles

Web開発者が知っておくべき基本的なcurlコマンド

GET、POST、ヘッダー、認証、タイムアウト、デバッグをカバーするcurlコマンドを活用し、コマンドラインでのAPIテストを効率化する方法を解説。

OpenReplay Team
OpenReplay Team
Web開発者が知っておくべき基本的なcurlコマンド

curlが初めてですか?初心者向けガイドから始めましょう:curlでHTTPリクエストを作成する

APIのデバッグやエンドポイントのテストを行う際、複雑なセットアップを必要としない迅速で信頼性の高いツールが必要です。PostmanのようなGUIツールにも用途がありますが、Web開発者向けのcurlコマンドは、コマンドラインテストにおいて比類のない速度と柔軟性を提供します。このリファレンスでは、基本的なGETリクエストから高度な認証パターンまで、日常的に使用する必須のcurlコマンドを取り上げます。

重要なポイント

  • まず基本的なGETとPOSTリクエストをマスターしましょう—これらはAPIテストニーズの80%をカバーします
  • Content-TypeとAuthorizationの適切なヘッダーを常に含めましょう
  • 接続問題をデバッグする際は詳細モード(-v)を使用しましょう
  • 本番環境でスクリプトがハングするのを防ぐためにタイムアウトを設定しましょう
  • 分析と比較のためにレスポンスをファイルに保存しましょう
  • 完全なリクエストチェーンのために-Lでリダイレクトをフォローしましょう
  • より良いJSON処理のためにjqのようなツールとcurlを組み合わせましょう

APIテストのための必須curlコマンド

1. 基本的なGETリクエスト

最もシンプルなcurlコマンドは、任意のURLからデータを取得します:

curl https://api.github.com/users/octocat

これは生のJSONレスポンスを返します。読みやすくするために、出力をJSONフォーマッターにパイプしましょう:

# macOS/Linux
curl https://api.github.com/users/octocat | jq

# Windows(jqのインストールが必要)
curl https://api.github.com/users/octocat | jq

使用場面: 迅速なAPIエンドポイントテスト、サービスが応答しているかの確認、またはスクリプト用のデータ取得。

2. JSONデータを含むPOSTリクエスト

現代のAPIはJSONペイロードを期待します。適切に送信する方法は以下の通りです:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"name":"John Doe","email":"john@example.com"}' \
  https://api.example.com/users

複雑なJSONの場合は、ファイルに保存して参照します:

curl -X POST \
  -H "Content-Type: application/json" \
  -d @user-data.json \
  https://api.example.com/users

使用場面: リソースの作成、フォームの送信、または構造化データを使用したPOSTエンドポイントのテスト。

3. カスタムヘッダーの追加

APIは認証、コンテンツネゴシエーション、またはカスタムパラメータのために特定のヘッダーを必要とすることがよくあります:

curl -H "Authorization: Bearer your-token-here" \
     -H "Accept: application/json" \
     -H "User-Agent: MyApp/1.0" \
     https://api.example.com/protected-resource

使用場面: API認証、ユーザーエージェントの設定、レスポンス形式の指定、またはカスタムアプリケーションヘッダーの追加。

4. リダイレクトのフォロー

デフォルトでは、curlはリダイレクトで停止します。自動的にフォローするには-Lを使用します:

curl -L https://bit.ly/shortened-url

無限ループを防ぐためにリダイレクトホップを制限します:

curl -L --max-redirs 5 https://example.com

使用場面: 短縮URLのテスト、APIリダイレクトのフォロー、またはアプリケーションでのリダイレクトチェーンの確認。

5. レスポンスをファイルに保存

ターミナルを散らかす代わりに、レスポンスを直接ファイルに保存します:

# 元のファイル名で保存
curl -O https://example.com/data.json

# カスタムファイル名で保存
curl -o my-data.json https://api.example.com/export

# ヘッダーとボディを別々に保存
curl -D headers.txt -o response.json https://api.example.com/data

使用場面: ファイルのダウンロード、分析用のAPIレスポンス保存、またはテスト結果のアーカイブ。

6. 基本認証

多くのAPIはまだ基本認証を使用しています。安全に処理しましょう:

curl -u username:password https://api.example.com/secure-endpoint

セキュリティを向上させるために、curlにパスワードの入力を促させます:

curl -u username https://api.example.com/secure-endpoint

使用場面: 内部APIのテスト、開発エンドポイントへのアクセス、またはレガシー認証システムでの作業。

7. デバッグ用の詳細出力

リクエストが失敗したり予期しない動作をする場合、詳細モードで何が起こっているかを正確に表示します:

curl -v https://api.example.com/endpoint

これは以下を表示します:

  • 送信されたリクエストヘッダー
  • 受信したレスポンスヘッダー
  • SSL/TLSハンドシェイクの詳細
  • 接続情報

使用場面: 失敗したリクエストのデバッグ、API動作の理解、またはSSL問題のトラブルシューティング。

8. タイムアウトの設定

接続タイムアウトと総タイムアウトを設定してハングするリクエストを防ぎます:

# 10秒の接続タイムアウト、30秒の総タイムアウト
curl --connect-timeout 10 --max-time 30 https://slow-api.example.com

使用場面: 遅いエンドポイントのテスト、スクリプトのハング防止、または信頼性の低いネットワークでの作業。

9. フォームデータの送信

従来のフォーム送信やファイルアップロードの場合:

# 標準フォームデータ
curl -X POST -d "username=john&password=secret" https://example.com/login

# ファイルアップロード
curl -F "file=@document.pdf" -F "description=Important doc" https://example.com/upload

使用場面: フォームエンドポイントのテスト、ファイルのアップロード、またはマルチパートデータでの作業。

10. レスポンスヘッダーの含有

出力にヘッダーとボディの両方を表示します:

# レスポンスにヘッダーを含める
curl -i https://api.example.com/endpoint

# ヘッダーのみ(ステータスコードの確認に有用)
curl -I https://api.example.com/endpoint

使用場面: レスポンスコードの確認、キャッシュ問題のデバッグ、またはAPIヘッダーの検査。

Web開発者向けの高度なcurlコマンド

Cookieの操作

リクエスト間でセッション状態を維持します:

# Cookieをファイルに保存
curl -c cookies.txt https://example.com/login

# 保存されたCookieを使用
curl -b cookies.txt https://example.com/dashboard

プロキシ設定

テストやセキュリティのためにプロキシ経由でリクエストをルーティングします:

curl --proxy http://proxy.company.com:8080 https://api.example.com

SSL証明書の処理

自己署名証明書を使用する開発環境の場合:

# 証明書検証をスキップ(開発のみ)
curl -k https://localhost:8443/api

# カスタムCA証明書を使用
curl --cacert custom-ca.pem https://secure-api.example.com

パフォーマンスと自動化のヒント

バッチ操作

複数のエンドポイントを効率的にテストします:

# 1つのコマンドで複数のURL
curl https://api1.example.com https://api2.example.com

# ファイルから
curl -K url-list.txt

出力フォーマット

レスポンスをより読みやすくします:

# jqでJSONを美しく表示
curl -s https://api.example.com/data | jq '.'

# 特定のフィールドを抽出
curl -s https://api.example.com/users | jq '.[] | .name'

エラーハンドリング

スクリプト用にHTTPエラーでcurlを静かに失敗させます:

curl --fail --silent https://api.example.com/endpoint || echo "Request failed"

curl vs. 他のツール:何をいつ使うか

curlを使用する場合:

  • 迅速なコマンドラインテスト
  • スクリプトと自動化
  • CI/CDパイプライン統合
  • 最小限のシステムリソース使用

Postmanを使用する場合:

  • 複雑なリクエストコレクション
  • チームコラボレーション
  • 視覚的なレスポンス検査
  • 高度なテストワークフロー

HTTPieを使用する場合:

  • より読みやすい構文を好む場合
  • JSON中心のAPIテスト
  • より良いデフォルトフォーマット

よくある質問

curlコマンドでAPIレート制限をどのように処理しますか?

limit-rateオプションを使用してリクエストを制限します。例えば、1秒あたり200キロバイトに制限します。また、sleepコマンドを使用してスクリプト内のリクエスト間に遅延を追加することもできます。

curlの-dフラグと-Fフラグの違いは何ですか?

-dフラグはデータをフォームエンコードとして送信し、これがPOSTリクエストのデフォルトです。-Fフラグはデータをマルチパートフォームデータとして送信し、ファイルをアップロードする際に必要です。

curlを使用してGraphQL APIをテストできますか?

はい。GraphQLクエリを含むJSONペイロードでPOSTリクエストを送信することで可能です。

curlでSSL証明書の問題をデバッグするにはどうすればよいですか?

詳細モードを使用してSSLハンドシェイクを検査し、必要に応じてinsecureフラグを使用して一時的に証明書検証をスキップするか、cacertオプションでカスタム認証局を指定します。

curlで認証されたAPIをテストする最良の方法は何ですか?

トークンベース認証の場合、トークンを含むAuthorizationヘッダーを渡します。基本認証の場合、usernameとpasswordオプションを使用します。セキュリティを向上させるために、機密値を環境変数に保存し、コマンドでそれらを参照します。

まとめ

これらのcurlコマンドは、コマンドラインAPIテストの基盤を形成します。基本的なGETとPOSTリクエストから始めて、ニーズの拡大に応じて徐々にヘッダー、認証、高度な機能を取り入れていきましょう。重要なのは、最も一般的なパターンに対する筋肉記憶を構築することです—ターミナルからエンドポイントを迅速にテストできるようになれば、開発とデバッグ中にcurlに常に手を伸ばすようになるでしょう。

Web開発者向けのcurlコマンドは、効率的なAPIテストとデバッグの基盤を提供します。これらのコマンドはすべてのプラットフォームで動作し、開発ワークフローにシームレスに統合されるため、あらゆるWeb開発者のツールキットにとって不可欠なツールとなっています。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers

We use cookies to improve your experience. By using our site, you accept cookies.