## What
curl は**ターミナルから HTTP リクエストを1回送るコマンド**。
API の実験台として使う。ブラウザと違って、GET 以外のメソッドを送れて、ヘッダを自由に付けられて、送受信の中身を丸ごと目で見られる。
## 構造 — 3つの部品しかない
```bash
curl -H "Authorization: Bearer eyJhbGci..." https://api.github.com/user
└┬─┘ └──────────────┬──────────────────┘ └──────────┬─────────┘
コマンド名 オプション(0個以上) URL(宛先)
```
オプションは `-` で始まり、**直後の値とセット**で読む。上の例は「ヘッダを1本付けて GET した」だけ。
> [!warning] 行末の `\` は curl のオプションではなく、**改行を打ち消すシェルの記号**。2行に折り返しても、1行に繋げて書いたのとまったく同じ意味になる
## How — 覚えるのは6個
| オプション | 意味 |
| --- | --- |
| (なし) | GET を送る |
| `-H` | ヘッダを1本足す |
| `-X` | メソッドを指定する |
| `-d` | ボディを送る |
| `-i` | レスポンスのヘッダも表示 |
| `-v` | 送受信の全文を表示(`>` が自分、`<` がサーバー) |
```bash
# 認証トークンを付けて GET
curl -H "Authorization: Bearer ghp_xxxx" https://api.github.com/user
# JSON を POST(4点セットが全部そろった形)
curl -X POST \
-H "Content-Type: application/json" \
-d '{"title":"バグ報告"}' \
https://api.github.com/repos/owner/repo/issues
```
curl の行を読むときは、**メソッド・パス・ヘッダ・ボディのどれを指定しているか**に分解すればいい。
## 落とし穴
- **`-d` を書くと自動で POST になる**ので `-X POST` は省ける。PUT や PATCH のときだけ `-X` が要る
- **URL とヘッダの値は必ず引用符で囲む**。クエリの `&` を囲まないと、シェルがそこで切ってバックグラウンド実行になる
## 関連
- [[API]] — API まわりの地図
- [[Bearer]] — `-H` で載せる認証ヘッダの中身
- [[HTTPリクエストの構造]] — 4点セットの読み方