curl で HTTP リクエスト

curl で HTTP リクエスト とは

curlコマンドを使い、ターミナルからWebサーバーにHTTPリクエストを送信する方法を習得します。本レッスンでは、curl で HTTP リクエスト の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ curl を覚えるか

curl は HTTP / HTTPS を中心にあらゆるプロトコルでデータをやり取りできるコマンドで、Linux 系 OS の事実上の標準ツールです。Web API の動作確認、ファイルのダウンロード、認証付きエンドポイントへのアクセス、スクリプトからのデータ送信、すべて curl で完結します。

アプリ開発者が日常的に curl を打つ場面は次の通りです。

  • 自作 API の動作確認 (curl http://localhost:8080/health)
  • 本番 API のステータス監視 (curl -I https://api.example.com)
  • CI から外部サービスへのデータ送信 (curl -X POST -d ...)
  • Webhook の手動再送 (curl -X POST -H Content-Type ...)
  • 古いファイルのダウンロード (curl -O https://...)

基本構文

ターミナル

curl [オプション] URL

何もオプションをつけないと、レスポンスボディを標準出力にそのまま吐き出します。HTML や JSON が画面いっぱいに流れるので、必要に応じてパイプで処理します。

よく使うオプション

オプション役割
-X METHODHTTP メソッドを指定 (POST, PUT 等)
-H 'Key: Value'リクエストヘッダを追加
-d '...'POST するデータ本体を指定
-o ファイル名レスポンスをファイル保存
-OURL の末尾名で保存
-Iヘッダのみ取得 (HEAD 相当)
-Lリダイレクトを追跡
-s進捗を非表示 (silent)
-v詳細表示 (リクエスト/レスポンスヘッダ)
--max-time 秒全体のタイムアウト

図解 curl の動き

diagram (will load when visible)

curl -v を付けると、この各ステップを * で始まる行で表示してくれます。トラブル発生時にどの段階で詰まっているのか把握しやすくなります。

GET リクエスト

最もシンプルな使い方が GET です。例えば JSON を返す API を呼んでパイプで整形します。

ターミナル

curl -s https://httpbin.org/get # { # "args": {}, # "headers": { # "Accept": "*/*", # ... # }, # "url": "https://httpbin.org/get" # }

httpbin.org は HTTP のテスト用エンドポイントで、送ったリクエストの内容をそのまま JSON で返してくれます。

POST リクエスト

ターミナル

curl -X POST \ -H 'Content-Type: application/json' \ -d '{"name":"alice","age":30}' \ https://httpbin.org/post

-H でヘッダを足し、-d でリクエストボディを渡します。-X POST を省略しても -d を付ければ自動で POST 扱いになります。

ヘッダだけ確認する

ターミナル

curl -I https://example.com # HTTP/2 200 # content-type: text/html; charset=UTF-8 # date: ...

-I は HEAD メソッドを送ってレスポンスヘッダだけ取得します。ステータスコード確認、リダイレクト先確認、キャッシュヘッダ確認などに最適です。

Web サイトが落ちていそうなとき、まず curl -I でステータスコードを見るのが定番です。200 なら正常、301302 ならリダイレクト中、5xx ならサーバーエラー、curl: (6) ならそもそも名前解決できていない、と一目で切り分けられます。

ファイルのダウンロード

ターミナル

# example.tar.gz というファイル名で保存 curl -O https://example.com/example.tar.gz # 名前を指定して保存 curl -o myname.tar.gz https://example.com/example.tar.gz # リダイレクトを追跡しつつ保存 curl -L -O https://example.com/latest

ダウンロード速度の表示が邪魔なら -s を足してサイレントにできます。

デバッグの定番 -v

何かおかしいときはまず -v (verbose) を付けます。

ターミナル

curl -v https://example.com # * Trying 93.184.216.34:443... # * Connected to example.com (93.184.216.34) port 443 # * ALPN: offers h2,http/1.1 # * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 # > GET / HTTP/2 # > Host: example.com # > User-Agent: curl/8.4.0 # > Accept: */* # < HTTP/2 200 # < content-type: text/html

* 行は curl 自身のログ、> はリクエスト、< はレスポンス。TLS のハンドシェイクで失敗していれば証明書周りを疑う、> GET の Host が想定と違えば DNS や /etc/hosts を疑う、というように原因を絞れます。

本番 API がおかしいときの最初の魔法のコマンドは curl -v。これだけで証明書、DNS、HTTP のどの段階で失敗しているか半分は判明します。

まとめ

  • curl は HTTP / HTTPS のスイスアーミーナイフ
  • -X でメソッド、-H でヘッダ、-d でボディ、-I でヘッダのみ
  • -v で詳細表示、-s で静かに、-L でリダイレクト追跡
  • パイプと組み合わせて JSON 整形やテキスト処理ができる
  • API 動作確認の事実上の標準。覚えると開発速度が大幅に上がる

次のレッスン

次は ネットワーク情報の確認 で、ip / ping / ss などのコマンドを使い、ネットワークの状態や接続を確認する方法を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. curl コマンド の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. curl コマンド とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

課題

  1. curl コマンドを使う
  2. curl --version の出力を使う
  3. 出力に curl が含まれることを確認する

ヒント

script.sh
script.sh
学習モード
script.sh
ターミナル出力