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

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

GET メソッド

GET メソッドGET メソッドとは、指定した URL からデータを取得するリクエストです。

curl では、-X オプションでメソッドを指定可能です。
※デフォルトが GET なので「curl google.com」と 「curl google.com -XGET」は同じ

curl google.com -XGET
<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/

HTTP リクエストの開始行/ヘッダーだけ見たい場合は、以下のように標準出力を捨てます。

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 "key=value" example.com

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

curl -b "key=value" example.com -v >/dev/null
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
> Cookie: key=value

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

curl -H "Cookie: key=value" 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)

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

よくある用途は、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 関連