3秒でわかる
コマンドラインからHTTPリクエストを送るツール。APIの動作確認や、ブラウザを介さない通信の切り分けに使う定番のコマンドです。
もう少し詳しく
どういうものか
curl は、ターミナルから URL へ通信してその応答を受け取るコマンドラインツールです。HTTP と HTTPS のほか FTP や SMTP など多くのプロトコルを扱えますが、実務での用途はほぼ API と Web サーバーへのリクエストです。macOS と多くの Linux ディストリビューション、Windows 10 以降には最初から入っています。
引数で URL を渡すと GET リクエストを送り、レスポンスの本文を標準出力に流します。オプションでメソッド、ヘッダー、ボディを自由に組み立てられるため、ブラウザやアプリを用意しなくても API を叩けます。
なぜ必要か
Web アプリの不具合が起きたとき、原因がフロントエンドにあるのかサーバーにあるのかを切り分ける必要があります。curl は JavaScript もブラウザも介さずに素の HTTP を送れるので、「curl では正しい JSON が返る」と分かればサーバーは無実だと確定します。逆に curl でも失敗するなら、画面側をいくら直しても意味がありません。
CI やデプロイのスクリプトからヘルスチェックを叩く用途でも定番です。
具体例
# レスポンス本文だけを見る
curl https://api.github.com/users/octocat
# ステータス行とヘッダーも見る (-i)
curl -i https://example.com
# ヘッダーだけ見る (-I はHEADリクエスト)
curl -I https://example.com
# JSONをPOSTする
curl -X POST https://api.example.com/v1/users -H "Content-Type: application/json" -d '{"name":"taro","age":28}'
# リダイレクトを追いかけ、失敗時に終了コードを立てる
curl -fsSL -o page.html https://example.com/moved
# 通信の中身を詳しく出す。TLSやリダイレクトの調査向け
curl -v https://example.comつまずきやすいところ
よくある事故が3つあります。ひとつめは、既定でリダイレクトを追わないことです。301 が返ると本文が空に見えるので -L を付けます。ふたつめは、HTTP のステータスが 404 や 500 でも curl 自体は終了コード 0 で成功扱いになる点です。シェルスクリプトの分岐に使うなら -f を付けてエラーを終了コードに反映させます。みっつめは -d を使うと自動的に POST になり、Content-Type が application/x-www-form-urlencoded になることです。JSON を送るつもりでヘッダーを付け忘れると、サーバー側でパースに失敗します。
似た用語との違い
| 語 | 位置づけ |
|---|---|
| curl | 1回のリクエストを送って結果を標準出力へ流すツール |
| wget | ファイルのダウンロードと再帰取得に強い。既定でファイル保存 |
| Postman | GUI でリクエストを組み立てて保存・共有するアプリ |
覚え方
ブラウザのアドレス欄に URL を打つ動作を、そのままターミナルに移したものが curl です。