ネットワーク監視・トラブルシュート

curl かーる

HTTPコマンドラインツールAPIRESTプロトコルデバッグ
curlについて教えて

簡単に言うとこんな感じ!

コマンド1行でウェブサーバーや APIに「話しかけ」できるツールだよ!ブラウザを開かなくても「このURLに繋いで、その返事を見せて」ってサクッとできる、IT担当者の万能メモ帳みたいな存在なんだ!


curlとは

curl(カール)は、コマンドラインから URL を指定してデータの送受信を行うツール・ライブラリです。正式名称は “Client URL” で、ブラウザを使わずにサーバーへリクエストを送り、レスポンスを受け取ることができます。HTTP/HTTPS はもちろん、FTPSMTP・SFTPなど多様なプロトコルに対応しているのが大きな特徴です。

実務でよく使われる場面は API の動作確認 です。「このAPIエンドポイントにデータを送ったとき、正しく返ってくるか?」を素早く試すとき、開発者は真っ先に curl を使います。ベンダーのAPI仕様書でも「まずこの curl コマンドを実行してみてください」というサンプルが頻繁に登場します。

curl はツールとしてのコマンド(curlコマンド)と、プログラムに組み込むためのライブラリ(libcurl)の2つの顔を持ちます。LinuxやmacOSには標準でインストールされており、Windows 10/11 にも標準搭載されているため、追加インストールなしにすぐ使える点が普及を後押ししています。


curlの基本的な使い方と仕組み

curl コマンドは「どのURLに」「どんな方法で」「何を送るか」をオプションで組み合わせて使います。

オプション意味使用例
(なし)GETリクエスト(データを取得)curl https://example.com
-X POSTPOSTリクエスト(データを送信)curl -X POST https://api.example.com/users
-Hヘッダーを追加-H "Authorization: Bearer TOKEN"
-d送信するデータ(ボディ)を指定-d '{"name":"田中"}'
-oレスポンスをファイルに保存-o result.json
-v通信の詳細を表示(デバッグ用)curl -v https://example.com
-kSSL証明書のエラーを無視curl -k https://...
-Iレスポンスヘッダーのみ取得curl -I https://example.com

典型的なAPI呼び出しの例

# 天気APIからデータを取得する(GET)
curl -H "X-Api-Key: 自分のAPIキー" \
     "https://api.weather.example.com/v1/current?city=Tokyo"

# 新しいユーザーを登録する(POST)
curl -X POST https://api.example.com/users \
     -H "Content-Type: application/json" \
     -d '{"name":"山田太郎","email":"yamada@example.com"}'

-v オプションで何が見えるか(デバッグの要)

-v(verbose)を付けると、通信の全工程が表示されます。

* Trying 93.184.216.34:443...        ← サーバーへの接続試行
* Connected to example.com           ← 接続成功
* SSL handshake完了                  ← 暗号化の握手
> GET / HTTP/1.1                     ← 送ったリクエスト(>が送信)
> Host: example.com
> User-Agent: curl/8.1.2
>
< HTTP/1.1 200 OK                    ← 受け取ったレスポンス(<が受信)
< Content-Type: text/html
<
(レスポンスボディ)

>が送信、<が受信と覚えると読みやすくなります。


歴史と背景

  • 1996年 — 前身となる httpget がスウェーデンの開発者 Daniel Stenberg によって作られる
  • 1997年 — ツール名が curl に変更される。“Client URL” の略
  • 1998年 — libcurl が分離され、ライブラリとしても使えるようになる
  • 2000年代 — Linux ディストリビューションへの標準搭載が進み、インフラエンジニアの必携ツールに
  • 2013年 — Windows PowerShell に Invoke-WebRequest が登場するが、本家 curl との違いから混乱が生まれる(後述)
  • 2018年 — Windows 10 ビルド1803に本家 curl.exe が標準搭載され、OS間の差がなくなる
  • 現在HTTPクライアントの事実上の標準として、スクリプト・CI/CD・API テストなど幅広い場面で使われ続けている。対応プロトコルは25種類以上

curl・wget・Postman の使い分け

ネットワーク越しにデータ取得・送信ができるツールは複数あります。立場によって使い分けが変わります。

ツール主な用途GUIの有無プロトコル対応向いている人
curlAPI検証・スクリプト組込みなし(CLI)25種類以上エンジニア・インフラ担当
wgetファイルのダウンロード・再帰取得なし(CLI)HTTP/FTP中心Linux管理者
PostmanAPIの設計・テスト・チーム共有あり(GUI)HTTP中心開発チーム全体
ブラウザ通常のWeb閲覧ありHTTP/HTTPS全員
curlが対応する主なプロトコル Webアクセス系 HTTP HTTPS HTTP/2 HTTP/3 WebSocket ファイル転送系 FTP FTPS SFTP SCP TFTP メール系 SMTP SMTPS IMAP IMAPS POP3 その他 LDAP DICT TELNET MQTT GOPHER ※ 合計25種類以上のプロトコルに対応(バージョンにより異なる)

Windows の curl と PowerShell の curl は別物!

Windows PowerShell で curl と打つと、実は Invoke-WebRequest のエイリアスが呼ばれることがあります。動作が微妙に異なるため、PowerShell 上で本家 curl を使いたい場合は curl.exe.exe まで明示するのが確実です。


関連する規格・RFC

規格・RFC番号内容
RFC 9110HTTP Semantics(HTTPの意味仕様)
RFC 9111HTTP Caching
RFC 9112HTTP/1.1
RFC 9113HTTP/2
RFC 9114HTTP/3
RFC 3986URI(Uniform Resource Identifier)の構文
RFC 8446TLS 1.3(HTTPS通信の暗号化に使用)

関連用語

  • HTTP — curlが最もよく使うアプリケーション層プロトコル
  • HTTPS — HTTPをTLSで暗号化した安全な通信方式
  • REST API — curlで動作確認する対象として最も多いAPIの設計スタイル
  • TLS — HTTPS通信の暗号化を担うプロトコル。curl -k で検証をスキップできる
  • HTTPステータスコード — curlのレスポンスで最初に確認する数字(200/404/500など)
  • FTP — curlが対応するファイル転送プロトコルの代表格
  • Postman — curlのGUI版ともいえるAPIテストツール
  • wget — curlと双璧をなすCLIダウンロードツール