初めに
本記事は HTTP 入門の curl に関連する記事は以下です。
また、Web サーバーの (HTTP サーバーに関連する) 記事は以下です。
- 【サーバー構築1】Web/リバースプロキシ/ロードバランサー (nignx)
- 【サーバー構築2】プロキシ/リバースプロキシサーバー (squid)
- 【サーバー構築3】アプリケーションサーバー (gunicorn + Flask)
- 【サーバー構築4】HTTPS に対応 (Let’s Encrypt)
- 【サーバー構築5】REST API サーバー(Flask)
GET メソッド
今回は curl で HTTP リクエストを送信し、HTTP レスポンスを確認していきます。
なお、HTTP リクエスト、HTTP レスポンスは以下の3つの要素で構成されます。
要素名 | 説明 |
---|---|
開始行 (ステータス行) | HTTP ステータスコード等を含みます |
ヘッダー | HTTP リクエストヘッダー、HTTP レスポンスヘッダー |
本文 | HTTP リクエストや HTTPレスポンスの本文 |
詳細については以下の記事をご覧ください。
オプションなし レスポンスの本文
オプションなしでは、HTTP レスポンスの本文を取得します。
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>

-I レスポンスの開始行/ヘッダー
オプション -I は HTTP レスポンスの開始行・ヘッダーを取得します。
HTTP/1.1 301 Moved Permanently Location: http://www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Mon, 18 Jul 2022 08:39:03 GMT (省略)
-L リダイレクト
リダイレクトを自動で実行します。

(中略);</script> </body></html>
HTTP/1.1 301 Moved Permanently Location: http://www.google.com/ (中略) HTTP/1.1 200 OK
-v 詳細を表示
詳細 (リクエスト、レスポンスの全てを含む) を標準エラー出力に出力します。
主にリクエストの内容を確認したり、デバッグする場合に利用します。
* Trying 172.217.161.78:80... * Connected to google.com (172.217.161.78) port 80 (#0) > GET / HTTP/1.1 > Host: google.com (省略) > < HTTP/1.1 301 Moved Permanently < Location: http://www.google.com/
このオプションを使う時はレスポンスボディが要らないことも多いので、以下のように標準出力を捨てるのもありです。
curl google.com -v > /dev/null
-O ファイルを保存
HTTP レスポンスの本文をファイルに保存します。
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>
-s サイレントモード
エラーメッセージを表示しません。
curl: (6) Could not resolve host: googl
-u BASIC 認証
オプション -u は Basic 認証 (ユーザー名とパスワードで認証) をします。
動作の詳細
Basic 認証では、「ユーザー名:パスワード」を Base64 でエンコードした値を、Authorization リクエストヘッダに追加します。
dXNlcm5hbWU6cGFzc3dvcmQ=
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
-b cookie を送信
リクエストヘッダを確認し、cookie が送信できているか見てみます。
> GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.81.0 > Accept: */* > Cookie: foo=bar; hoge=tech
ヘッダを見てのとおり、オプション -b は以下と同じ意味を持ちます。
-c cookie を保存
cookie.txt に cookie の内容を保存します。
-k TLS 証明書の検証をスキップ
開発中で自己証明書を無視するために使うことが多いです。
POST メソッド
-X メソッドの指定
-X でメソッドを指定します。
デフォルトでは GET メソッドを指定するので、今までは -X オプションをつけていませんでした。
-d フォームデータをサーバーに送信
ユーザーが HTML フォームにデータを入力して、ボタンを押すのと同じです。

name 属性に対応する input 要素に、値を代入して送信する例
送信するデータにファイルを指定する場合は、「@」を利用
-H リクエストヘッダを追加 (json)
リクエストヘッダを追加します。
REST API でデータが JSON であることを伝えるために利用したりします。
curl example.com -XPOST -H "Content-Type: application/json" -d ' { "foo":"bar" }'
> POST / HTTP/1.1 > Host: example.com > Content-Type: application/json
関連記事
■HTTP 入門
- 【サーバー構築1】Web/リバースプロキシ/ロードバランサー (nignx)
- 【サーバー構築2】プロキシ/リバースプロキシサーバー (squid)
- 【サーバー構築3】アプリケーションサーバー (gunicorn + Flask)
- 【サーバー構築4】HTTPS に対応 (Let’s Encrypt)
- 【サーバー構築5】REST API サーバー(Flask)