A Micro Toolbox

ソフトウェアのニッチな問題の対処記録です

curlとChromeのコマンドラインオプションで名前解決

Webアプリ検証で、ドメインやホスト名を一時的に非公開サーバーに向けてアクセスしたいときがある。 /etc/hostsに設定追加したり、Hostヘッダーを書き換えたりして対処できることも多いが、ここでは別案としてcurlChromeコマンドラインオプションで名前解決する方法。

curlの場合

--resolve ドメイン:ポート:IPアドレス

複数のドメイン:ポートを指定するときは「--resolve ドメイン:ポート:IPアドレス」を繰り返す。

$ curl -s --resolve example.com:8000:127.0.0.1 --resolve example.org:8000:127.0.0.1 http://example.com:8000 | grep h1
<h1>Directory listing for /</h1>
$
$ curl -s --resolve example.com:8000:127.0.0.1 --resolve example.org:8000:127.0.0.1 http://example.org:8000 | grep h1
<h1>Directory listing for /</h1>
$

Chromeの場合

--host-resolver-rules="MAP ドメイン:ポート IPアドレス:ポート"

最初のポートはブラウザからアクセスするときのもの。指定しなければ全ポートのアクセスがIPアドレスで指定したサーバーに行く。 二番目のポートは実際にWebアプリが待ち受けているポート。

複数指定するときは「,」区切りで「MAP ドメイン:ポート IPアドレス:ポート」を繰り返す。

ショートカットを作ると楽。

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --incognito --user-data-dir=C:\path\to\chrome-profiles\internal-test --host-resolver-rules="MAP example.com:8080 127.0.0.1:8000, MAP *.example.org 127.0.0.1:8000"

Chromeexample.com:8080にアクセスした様子