curlのVerboseモードとデバッグ
curlのverboseモード、トレース出力、タイミングメトリクスを使ったHTTPリクエストのデバッグ方法を解説。TLSハンドシェイク、ヘッダー、レスポンス詳細の調査方法を学びましょう。
curl
詳細な説明
curlでHTTPリクエストをデバッグする
curlはHTTPの問題をデバッグするための最良のツールのひとつです。verboseモードとtraceモードにより、DNS解決からTLSネゴシエーションまで、リクエスト・レスポンスライフサイクルのあらゆる詳細を確認できます。
Verboseモード
-v フラグでリクエストとレスポンスの全体の通信を表示します:
curl -v https://api.example.com/data
出力のプレフィックス:
*— curlの情報メッセージ(DNS、TLS、接続)>— サーバーに送信されたリクエストヘッダー<— サーバーから受信したレスポンスヘッダー
Traceモード
さらに詳細な情報が必要な場合、--trace ですべてのデータの16進ダンプを出力します:
curl --trace trace.log https://api.example.com/data
または --trace-ascii で読みやすいASCIIダンプを出力します:
curl --trace-ascii - https://api.example.com/data
タイミング情報
-w(write-out)でタイミングメトリクスを表示します:
curl -s -o /dev/null -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTLS: %{time_appconnect}s\nFirst byte: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
https://api.example.com/data
レスポンスコードのみ
HTTPステータスコードだけを確認します:
curl -s -o /dev/null -w "%{http_code}" https://api.example.com/health
TLS詳細の調査
curl -v --tlsv1.2 https://example.com 2>&1 | grep "SSL\|TLS\|certificate"
エラー付きサイレントモード
-sS でプログレス出力を抑制しつつ、エラーは表示します:
curl -sS https://api.example.com/data
デバッグチェックリスト
APIリクエストが失敗した場合、以下の体系的なアプローチを使います:
- 接続性の確認:
curl -vでDNSとTCP接続を検証する - ヘッダーの調査: Content-Type、Authorization、その他の必須ヘッダーを確認する
- TLSの確認: 証明書エラーやバージョンの不一致を確認する
- タイミングの検査:
-wでレイテンシの発生箇所を特定する - 動作するリクエストとの比較: 成功するリクエストと失敗するリクエストのverbose出力を比較する
Write-Out変数
主な -w 変数: %{http_code}、%{content_type}、%{size_download}、%{speed_download}、%{url_effective}、%{num_redirects}、%{ssl_verify_result}。
ユースケース
失敗しているAPI連携をトラブルシューティングする開発者が、TLSハンドシェイク、リクエストヘッダー、レスポンスタイミングを含む完全なHTTP通信を調査する必要がある場合に使用します。