Skip to content

MS_CurlCommand

nishi_74322014 edited this page Aug 3, 2026 · 1 revision

cURLコマンド

概要

RESTful API をテストしたり、開発したりする際に有用な cURL コマンド。
Windows 環境でも使ってみたいので、インストールから実行まで調査してみる。

補足(最新化): Windows 10 バージョン 1803 以降、 curl.exe が OS に標準搭載されている (C:\Windows\System32\curl.exe)。 別途インストールする必要は無くなった。

ただし PowerShell では curlInvoke-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"

プロキシ認証にも対応している。

補足: コマンドラインにパスワードを直接書くと、 シェルの履歴やプロセス一覧(tasklistps)から見える。 環境変数 HTTPS_PROXY / HTTP_PROXY を使うか、 .curlrc(Windows では _curlrc)に書くほうが安全である。 認証情報全般については -u user とだけ書けば パスワードは対話的に聞かれる。

電文の確認

  • Request 電文と Response 電文の Body 以外は確認できない。

  • これらを確認するには、Fiddler などを
    使用する必要がある。

補足: 現在は --trace-ascii - を使えば cURL 単体でも送受信の生データをほぼ確認できる。 また、TLS で暗号化された通信を Wireshark で復号したい場合は SSLKEYLOGFILE 環境変数を設定してセッション鍵を書き出す方法がある。

WebAPI

テスト環境

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データのPOST

JSONRESTful 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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally