前回はcurlで実行する方法を紹介しました。
次はPowerShellで提供されているコマンドレットを紹介します。
前回「Windows環境でコマンドラインからHTTP/HTTPS通信をする(1)」
Invoke-WebRequestを使う
PowerShell 3.0より導入されたコマンドレットです。
以下はInvoke-WebRequestの公式リファレンスです。(2024年2月現在)
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.4
シンプルなHTTPリクエストを送信する
Invoke-WebRequest -URI https://example.com
証明書エラーを無視してリクエストを送信する
証明書エラーを無視する [ -SkipCertificateCheck ] スイッチは、PowerShell 6.0以降で利用できます。
※ [ $PSVersionTable.PSVersion ] を実行して、バージョンを確認しておきましょう。
Invoke-WebRequest -SkipCertificateCheck -URI https://test.example.com
↑のような私が意図したエラーを無効化してくれないことがあったので、 [ SkipCertificateCheck ] スイッチについて別の機会に検証してみようと思います。
リクエストヘッダを指定する
$headers=@{
"X-Forwarded-For"="203.0.113.195"
}
$response=Invoke-WebRequest -Uri "https://example.com" -Headers $headers
$response.Headers #レスポンスヘッダの表示
$response.Content #レスポンスボディの表示
ハッシュに任意のHTTPヘッダとその値を入れることで、そのヘッダを使ってリクエストを行えます。
HEADメソッドでリクエストを送信する
$response = Invoke-WebRequest -Uri "https://example.com" -Method Head
$response.Headers
POSTメソッドでリクエストを送信する
$body="param1=1¶m2=2"
$headers=@{
"Content-Type" ="application/x-www-form-urlencoded"
}
$response = Invoke-WebRequest -Uri "https://example.com/" -Method Post -Body $body -Headers $headers
$response.Content
デフォルトでは [ Content-Type : application/x-www-form-urlencoded ] を用いてリクエストします。日本語などパーセントエンコードが必要なデータを送る場合には、対象の文字列を手動でエンコーディングする必要があります。
HTTPバージョンを指定してリクエストを送信する
Invoke-WebRequest -URI https://example.com -HttpVersion 2.0
Invoke-WebRequest -URI https://example.com -HttpVersion 1.1
自社WebサイトでどのHTTPバージョンが有効化されているのかを簡単にチェックするときに使います。
Webブラウザでリクエストを行うと、ブラウザがサポートしているもっとも高いバージョンを受け入れるため、ほかにどのバージョンが稼働しているのかわからないことがあります。
そういう場合に、このコマンドを送ると簡単に利用可能バージョンを確認できます。