【入門】curl コマンドとは?よく使うオプションの使い方を説明

curlcurl とは、サーバーにリクエストを送信し、レスポンスを受け取るコマンドです。
HTTP プロトコル以外でリクエストも可能。本記事は HTTP を対象
スポンサーリンク

初めに

本記事は HTTP 入門の curl に関連する記事は以下です。

また、Web サーバーの (HTTP サーバーに関連する) 記事は以下です。

スポンサーリンク

GET メソッド

GET メソッドGET メソッドとは、指定した URL にリクエストを送信します。

今回は curl で HTTP リクエストを送信し、HTTP レスポンスを確認していきます。

なお、HTTP リクエストHTTP レスポンスは以下の3つの要素で構成されます。

要素名説明
開始行 (ステータス行)HTTP ステータスコード等を含みます
ヘッダーHTTP リクエストヘッダー、HTTP レスポンスヘッダ
本文HTTP リクエストや HTTPレスポンスの本文

詳細については以下の記事をご覧ください。

オプションなし レスポンスの本文

オプションなしでは、HTTP レスポンスの本文を取得します。

curl google.com
<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>
HTTP レスポンスの本文をブラウザで表示

-I レスポンスの開始行/ヘッダー

オプション -I は HTTP レスポンスの開始行・ヘッダーを取得します。

curl google.com -I
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 リダイレクト

リダイレクトを自動で実行します。

curl google.com -L
(中略);</script>        </body></html>
curl google.com -IL
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
(中略)

HTTP/1.1 200 OK

-v 詳細を表示

詳細 (リクエスト、レスポンスの全てを含む) を標準エラー出力に出力します。

主にリクエストの内容を確認したり、デバッグする場合に利用します。

curl google.com -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 レスポンスの本文をファイルに保存します。

curl -O google.com/index.html
cat index.html
<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 googl -s
curl googl
curl: (6) Could not resolve host: googl

-u BASIC 認証

オプション -u は Basic 認証 (ユーザー名とパスワードで認証) をします。

curl example.com -u $username:$password

動作の詳細

Basic 認証では、「ユーザー名:パスワード」を Base64 でエンコードした値を、Authorization リクエストヘッダに追加します。

echo -n "username:password" |base64
dXNlcm5hbWU6cGFzc3dvcmQ=
curl example.com -u username:password -v >/dev/null
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

-b cookie を送信

curl -b "foo=bar; hoge=tech" example.com

リクエストヘッダを確認し、cookie が送信できているか見てみます。

curl -b "foo=bar; hoge=tech" example.com -v >/dev/null
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
> Cookie: foo=bar; hoge=tech

ヘッダを見てのとおり、オプション -b は以下と同じ意味を持ちます。

curl -H "Cookie: foo=bar; hoge=tech" example.com

-c cookie を保存

cookie.txt に cookie の内容を保存します。

curl example.com -c cookie.txt

-k TLS 証明書の検証をスキップ

開発中で自己証明書を無視するために使うことが多いです。

curl https://example.com -k
スポンサーリンク

POST メソッド

POST メソッドPOST メソッドとは、指定した URL にデータを送信します。

-X メソッドの指定

-X でメソッドを指定します。

curl example.com -XPOST

デフォルトでは GET メソッドを指定するので、今までは -X オプションをつけていませんでした。

-d フォームデータをサーバーに送信

ユーザーが HTML フォームにデータを入力して、ボタンを押すのと同じです。

HTML フォームの例

name 属性に対応する input 要素に、値を代入して送信する例

curl example.com -XPOST -d "username=foo" -d "password=bar"

送信するデータにファイルを指定する場合は、「@」を利用

curl example.com -XPOST -d @test.txt

-H リクエストヘッダを追加 (json)

リクエストヘッダを追加します。

REST API でデータが JSON であることを伝えるために利用したりします。

curl example.com -XPOST -H "Content-Type: application/json" -d '                 
{
 "foo":"bar"
}'
curl example.com -XPOST -H "Content-Type: application/json" -v >/dev/null
> POST / HTTP/1.1
> Host: example.com
> Content-Type: application/json

関連記事

HTTP 入門

Web サーバー (HTTP サーバー関連)