#前置き
デバッグ用Proxyサーバーである『Fiddler』の機能の1つに
条件にマッチしたURLを差し替える『AutoResponder』という機能があり、
差し替えパターンの1つとしてローカルファイルを選択することが出来る。
実はこの機能、正規表現を使うことでかなり柔軟な設定が可能なのだが
ドキュメントに明示されていないためか気付いていない人が結構いるようなので方法を書いておく。
なお、本記事ではFiddlerの導入方法などについては省略する。
今回記事を書くにあたって利用した環境はWindows 10。
#差し替えの有効化
今回は下記ブログ記事の画像を差し替えてみることにする。
まずは指定したURLを単にFiddlerで返させる所から。
Fiddlerを起動し、右のタブ一覧から『AutoResponder』を選択し、
右上にある『Enable rules』と『Unmatched requests passthrough』(条件にマッチしなかったURLは無視)をチェックする。
左のリクエスト一覧から差し替えたいものを選択して右中央の領域へドラッグ&ドロップすることで、
Fiddlerによるレスポンス差し替えが有効となる。
初期状態(*200-SESSION_1)ではサーバーへリクエストする代わりに、
最初のドラッグ元で返していたレスポンス内容がFiddlerから固定で返るようになる。
#ローカルファイルと1対1で差し替える
次にローカルのファイルと1対1で差し替えてみる。
レスポンス内容を修正するルールを右側から選択した状態で右下のセレクトボックスを選択すると、
マッチしたリクエストに対しFiddlerがどのような応答を返すかを選択することが出来る。
今回は一番下の『Find a file...』を選択し、
開いたファイルダイアログから任意のローカルファイルを選択する。
選択後に右下のSaveボタンを押すことで内容が反映される。
ローカルファイルを直接指定した例が以下。
後で正規表現対応するためにファイル名を合わせているが、
単純に1対1で差し替える場合は特に名前を合わせる必要はない。
ブラウザーをリロードすることで内容が差し変わったことが確認できる。
#正規表現を利用して特定ディレクトリー下のファイルをまとめて置き換える
いよいよ本題の正規表現を利用する例。
正規表現を用いる場合は条件部の先頭を元の『EXACT』から『REGEX』に変更する。
その上で差し替えたいディレクトリー下を、グループ化の正規表現『(.*)』を利用して下記のように指定する。
マッチしたグループはレスポンス形式選択欄から参照することが可能なので、ファイルパス指定に『$1』を指定する。
内容編集後は反映のため、再度右下のSaveボタンを押す。
ブラウザーをリロードした結果が以下。
2つの画像がそれぞれローカルのファイルと置き換わっている。
なお、グループ化した部分にスラッシュ記号が含まれた場合も正しくディレクトリー構造として解釈される。
例えばグループ化部分に『foo/bar/baz.jpg』といったURLがマッチした場合は、
$1部分も『foo\bar\baz.jpg』というように展開され、
子ディレクトリーや孫ディレクトリー下に設置したファイルを返すことが出来る。
今回はローカル側のディレクトリー構造をサーバー側と合わせたが、
例えばURLのクエリー部分にファイル名が入るようなケースなど、
応用次第で動的なURLに対して柔軟に置き換え対象を指定することが出来る。
なお、URLを正規表現として解釈する際、『/』など大半の記号については特に気にかける必要がないが、
クエリー部開始を表す文字である『?』が正規表現の『0回か1回登場』と解釈されてしまう点は見逃しがちなので、
バックスラッシュでエスケープするのを忘れないよう注意が必要。
#参考
Autoresponder Reference - Fiddler Documentation
http://docs.telerik.com/fiddler/KnowledgeBase/AutoResponder