動機
- 追加のソフトウェアのインストールが制限された環境で、任意のHTTPヘッダを指定したリクエストを送信したい。
- 実行環境が認証つきプロキシサーバの後ろ側にいて、使用するプロキシサーバはアクセス先ごとに
proxy.pacで制御されている。Windowsのcurl.exeとかPowerShellのInvoke-WebRequestを使う方法もあるにはあるんだけど、使用するプロキシサーバのIPをいちいち調べないといけないし、コマンド中に書いたcredentialがヒストリに残っちゃったり、環境変数から参照できちゃううのはよろしくない。特に個人に紐づいた認証情報を使わないといけない場合などに顕著。 - WindowsならEdgeは最初からインストールされているし、
proxy.pacも解釈してくれるので、Edgeの開発者ツール(またはChromeのDevTools)で実行できるのが望ましい。
問題
- DevToolsのオプションだけで指定できるのは
User-Agentなど一部のヘッダだけで、拡張なしに任意のHTTPリクエストヘッダを指定することはできない。 - HTTPリクエストヘッダを指定してリクエストを送信したい場合、JavaScriptコンソールから
fetchメソッドを使う方法をとるが、この場合にはDateなどJavaScriptの仕様上指定できないヘッダがある。
対策
- JavaScriptの仕様上制限のないHTTPヘッダであれば
fetchメソッドを使う。 - JavaScriptの仕様上送信できないHTTPヘッダを使いたい場合は、仕方がないから認証情報をコマンドライン等で指定して
curl.exeなどを使う。