-
Notifications
You must be signed in to change notification settings - Fork 0
MS_CurlCommand
RESTful API をテストしたり、開発したりする際に有用な cURL コマンド。
Windows 環境でも使ってみたいので、インストールから実行まで調査してみる。
補足(最新化): Windows 10 バージョン 1803 以降、
curl.exeが OS に標準搭載されている (C:\Windows\System32\curl.exe)。 別途インストールする必要は無くなった。ただし PowerShell では
curlはInvoke-WebRequestの別名 (Windows PowerShell 5.1 の場合)であり、 本物の cURL を呼びたいときはcurl.exeと拡張子まで書く必要がある。 これは非常にハマりやすい。curl.exe -v https://example.com/ # 本物の cURL curl https://example.com/ # Invoke-WebRequest の別名(PS 5.1)なお PowerShell 7 以降では
curlの別名は削除されているため、curlがそのままcurl.exeを指す。
参考情報を参考に、インストール+コマンド実行を行なう。
cURL のオプションは --help で確認することができる。
curl.exe -X POST "https://api.example.com/v1/items" ^
-H "Content-Type: application/json" ^
-H "Authorization: Bearer <token>" ^
-d "{\"name\":\"foo\"}"
| オプション | 内容 |
|---|---|
-X, --request |
HTTP メソッドを指定する |
-H, --header |
リクエスト ヘッダを追加する |
-d, --data |
POST するデータ(指定すると既定で POST になる) |
-i, --include |
レスポンス ヘッダも出力する |
-v, --verbose |
リクエスト/レスポンス ヘッダを含む詳細を出力する |
-L, --location |
リダイレクトを追跡する |
-o, --output |
ファイルに出力する |
-k, --insecure |
サーバ証明書の検証をスキップする |
-u, --user |
Basic 認証のユーザ/パスワード |
-x, --proxy |
プロキシを指定する |
補足:
-k(--insecure)は SSL/TLS のサーバ証明書検証を無効化するもので、 中間者攻撃に対して無防備になる。 「証明書エラーが出たのでとりあえず-k」は 証明書で発生する問題の原因究明を放棄する行為なので、 検証環境に限ること。 社内 CA の証明書が原因なら、--cacertで CA 証明書を渡すのが正しい。
プロキシ設定が必要な場合、オプションは
--proxy [protocol://][user@password]proxyhost[:port]
なので、実際は、こんな感じ、
curl --proxy "http://uid:pwd@proxy.intra.xxxx.co.jp:8080" "http://target.com"
プロキシ認証にも対応している。
補足: コマンドラインにパスワードを直接書くと、 シェルの履歴やプロセス一覧(
tasklist、ps)から見える。 環境変数HTTPS_PROXY/HTTP_PROXYを使うか、.curlrc(Windows では_curlrc)に書くほうが安全である。 認証情報全般については-u userとだけ書けば パスワードは対話的に聞かれる。
-
Request 電文と Response 電文の Body 以外は確認できない。
- Request ヘッダと Response ヘッダは
--verboseや--includeの
オプション指定で参照可能。
- Request ヘッダと Response ヘッダは
-
これらを確認するには、Fiddler などを
使用する必要がある。
補足: 現在は
--trace-ascii -を使えば cURL 単体でも送受信の生データをほぼ確認できる。 また、TLS で暗号化された通信を Wireshark で復号したい場合はSSLKEYLOGFILE環境変数を設定してセッション鍵を書き出す方法がある。
cURL の評価目的なら RESTful API を自作するより、
何かのサービスを利用したほうが早い。
移行メモ: 元ページでは WebPay のテスト環境を使用していたが、 WebPay は 2017 年にサービスを終了している。 現在、cURL の練習に使える公開テスト API としては
httpbin.org(リクエストの内容をそのまま返す)やjsonplaceholder.typicode.comなどがある。curl.exe -v https://httpbin.org/post -d "a=1&b=2"
JSON の RESTful API だけでなく、JSON-RPC などが流行っている。
従って、Request Body が JSON の API もあり得る。
・・・その場合、以下のように JSON データを POST できる。
curl.exe -X POST "https://api.example.com/rpc" ^
-H "Content-Type: application/json" ^
-d "@request.json"
補足: Windows のコマンド プロンプトでは JSON 中のダブル クォートのエスケープが非常に煩雑になる。
-d "@ファイル名"でファイルから読ませるのが確実である。 PowerShell では--%(停止パーサ トークン)を使うと 引数の再解釈を防げる。
Tags: 通信技術, .NET開発, .NET Core, .NET Standard, ASP.NET, ASP.NET Web API
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。