Windows10 PowerShell に組み込まれている curl コマンド(実際にはInvoke-WebRequestのエイリアス)を使って、複数ヘッダー情報をサーバーに送りたい場合の書式に関してのメモです。
Windows10には curl.exe コマンドがデフォルトでインストールされており、C:\Windows\system32\curl.exe でHTTPで複数ヘッダー情報を送りたい場合は、必要な数だけ -H “parameter1” -H “parameter2″….. と記述する必要があります。以下赤文字部分。
curl.exe -s -c cookie.txt
-H "X-Radiko-App: pc_html5"
-H "X-Radiko-App-Version: 0.0.1"
-H "X-Radiko-User: dummy_user"
-H "X-Radiko-Device: pc"
-I -L https://radiko.jp/v2/api/auth1
PowerShell の curl、実際にはInvoke-WebRequest を使って、同様に複数ヘッダー情報を送るためにはどう書けばいいか?これは、ラジコタイムフリーサーバーと通信する場合に必要です。
Invoke-WebRequest には -Headers というオプションがあるのですが、これはcurl.exe とは異なり、コマンドライン中 1回しか指定できません。なので、一度変数に代入して連想配列にする必要があるそうです。
その書式は?
PowerShell もVBや他言語同様バージョンアップごとにコマンド書式が変わっているようで、複数ヘッダーを指定する場合の書式を見つけるのに苦労しました。
$auth_headers = @{ 'X-Radiko-App' = 'pc_html5' 'X-Radiko-App-Version' = '0.0.1' 'X-Radiko-User' = 'dummy_user' 'X-Radiko-Device' = 'pc' } curl https://radiko.jp/v2/api/auth1 -Headers $auth_headers
ヘッダー内のコロン : を = に置き換え、パラメータ名と値をシングルクォートで囲む。そして、変数に入れる。そのあとで、-Headers オプションに続き、指定した変数を記述すれば curl.exe を使う場合と同じように使えます。(上記サンプル内の青字部分)
Invoke-WebRequest の複数ヘッダーに関しては、以前とは書式が変わっているのかWeb検索で表示されたqiita情報とは指定方法が異なっていました。