## 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点セットの読み方