Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

DevToolsでExtensionなしに任意のHTTPヘッダを送信できない

動機

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

問題

  • DevToolsのオプションだけで指定できるのはUser-Agentなど一部のヘッダだけで、拡張なしに任意のHTTPリクエストヘッダを指定することはできない。
  • HTTPリクエストヘッダを指定してリクエストを送信したい場合、JavaScriptコンソールからfetchメソッドを使う方法をとるが、この場合にはDateなどJavaScriptの仕様上指定できないヘッダがある。

developer.mozilla.org

対策

  • JavaScriptの仕様上制限のないHTTPヘッダであればfetchメソッドを使う。
  • JavaScriptの仕様上送信できないHTTPヘッダを使いたい場合は、仕方がないから認証情報をコマンドライン等で指定してcurl.exeなどを使う。