Web技術 ネットワーク技術

Windows環境でコマンドラインからHTTP/HTTPS通信をする(1)

通常、Windows環境からHTTP/HTTPSリクエストを送る場合、ブラウザやPostmanを使います。
ただ、環境によっては制限がかかることがあるため、コマンドラインからリクエストを送る方法をメモしておきます。
最初はcurlを使った方法を紹介します。Linuxでの使用方法とあまり変わりません。

Curlを使う

数年前にはWindowsでcurlを実行するには一手間必要でしたが、2017年にcurlが組み込まれました。What’s new in Build 17063

シンプルなHTTPリクエストを送信する

curl https://example.com

証明書エラーを無視してリクエストを送信する

https通信時、curlがユーザエージェントとして証明書を検証し、エラーが発生した場合には通信を中断します。
検証環境やサーバ認証をしないような環境に対してリクエストを送る場合には [ -k ] オプションを付けます。

curl -k https://example.com

なお、 [ -k ] オプションを付ける理由がはっきりしない場合にはつけることは勧めません。
セキュリティリスクにつながる可能性があります。

リクエストヘッダを指定する

以下のケースでたまに使います。

  • 任意のX-Forwarded-For ヘッダの値を付与する
  • Content-Typeヘッダを付与する(後述)
  • Cookieを付与する
  • HTTPホストヘッダを書き換える

HTTPヘッダを指定する場合には、 [ -H ] オプションを付けて、ヘッダは [ ” ] で囲みます。

curl -H "X-Forwarded-For: 203.0.113.195" https://example.com/

HEADメソッドでリクエストを送信する

HEADメソッドは、WebサーバにHTTPヘッダのみ応答させるために利用します。
[ -I ( アイ ) ] [ –head ] をつけてリクエストを送ります。

curl -I https://example.com

curl --head https://example.com

※HEADメソッドが許可されないサーバには使えないため、ネットの記事にレスポンスヘッダのみを取得する方法として紹介されていますが、不適切なケースがあります。

POSTメソッドでリクエストを送信する

POSTメソッドを使ってリクエストを送信する場合、いくつかのパターンがあります。
最もシンプルなのは、 [ -d ] [ –data ] オプションをつける方法です。

curl -X POST -d "query1=1" https://example.com

なお、デフォルトでは [ Content-Type : application/x-www-form-urlencoded ] を用いてリクエストします。日本語などパーセントエンコードが必要なデータを送る場合には、対象の文字列を手動でエンコーディングする必要があります。

他には [ -F ] オプションを使って [ multipart/form-data ] 形式でリクエストする、 [ Content-Type: application/json ] を使ってJSON形式のデータを送信する方法があります。

※ [ –data-binary ] オプションをつけるとデータをバイナリ形式で送信できますが、この方法はめったに使いません。