読者です 読者をやめる 読者になる 読者になる

Linux でだって Fiddler したい

Fiddler

@sugamasao 先生もブログに書いてらっしゃる Fiddler は、全 Web 開発者必携のツールとも言える最高の HTTP プロキシというか HTTP スプーフィング・モニターツールですが、なんたることか MS 様謹製ゆえの Windows Only 。

ところが僕は今や会社も自宅も Ubuntu または OpenBSD である生粋の Unix ライクシステム野郎であり、 Fiddler つかえない!。あるのは WireShark だけ!。硬派すぎる!。レイヤー低すぎる!。もっとこうね、わかるでしょ?。素直にリクエストとレスポンスはまとまってて欲しいですし、レスポンスが JSON とか XML だったら特別なビューワで素敵に表示して欲しいですし、ポチポチと GUI で再リクエストしたりちょっとリクエストの内容変えてみたりレスポンス差し替えてみたりカジュアル感覚で HTTP を楽しみたい!。

そう思って検索してみたら、まあ Charles らしい。 WindowsMac もあるけど Linux 版っつーか、これ Java アプリなんで。ええ。見た目は Java っぽい感じでがっかりだし、動きもなんだか鈍いけれど少し体験した感じではやることはやってくれる頼もしいやつって感じがしたので購入してました。 $50 。

Charles

Fiddler ができることはあの独特のスクリプトを除いて大体できます。ただ、プロキシ自動設定ファイルを生成してくれないので( Windows 上の IE と、全プラットフォームの Firefox 用にはアドオンがあって勝手になんとかしてくれる)、特に LinuxGoogle Chrome をメインにしてる自分なんかにはしんどい。じゃあと思って調べたら、プロキシ自動設定ファイルって JS で、すごい簡単な書式であることが判明。

function FindProxyForURL(url, host) { return "PROXY my.ip.address:8888; DIRECT"; }

以上終わり。なんかもう正式なリファレンスがどこにあるのだかわからないくらい古い仕組みらしく、英語版 Wikipedia が主なリソースだったり本家は web.archive だったりするんですがとりあえず上記で動きます。ポートは Charles のデフォルトが 8888 だっただけで特に深い意味はなし。本当は引数に渡ってくる URL や hostname で細かく PROXY の使用不使用や PROXY サーバを割り振ったりできるんですよ。それも簡単です。

ちなみに、上記のとおり返り値が文字列で、セミコロンで区切られた左側から試行してくれてどんどん右にフォールバックしていく形。いいんですけど、いいんですけどこれプロキシ立ち上がってないときに毎回フォールバックになるのも気持ちが悪いので、

function FindProxyForURL(url, host) { return "DIRECT"; }

PROXY を使わないこういうダイレクトのみの設定ファイルを用意して、 Charles の起動時と終了時に切り替えるようにしました。 Charles の起動シェルスクリプトを、以下のように書き換えます。

#!/bin/sh

cp /home/oogatta/public_html/pac/proxy.pac.use /home/oogatta/public_html/pac/proxy.pac
java -Dcharles.config="~/.charles.config" -jar `dirname $0`/../lib/charles.jar; cp /home/oogatta/public_html/pac/proxy.pac.direct /home/oogatta/public_html/pac/proxy.pac  &

終わり。それで、 http://my.ip.address/~oogatta/pac/proxy.pacGoogle ChromeFirefox 、それに別のマシンである MacSafariVM 上で動く WindowsIEFirefox にもプロキシ自動設定ファイルとして設定。

初回接続時だけ許可を求めるダイアログが Linux ホスト側にでるけど、 OK すれば勝手にアクセスコントロール設定にクライアント側の IP を登録してくれます。イイネ!

要するに Fiddler

結局、 VM 上の Fiddler をプロキシにして上記のようなことをやっても同じだったんですが、いつも VM が上がってるわけではないのと、 Linux ホスト中で動いて欲しかったのでやはりこのようにしました。すごくよくなった。そうそう、プロキシ自動設定ファイルを file スキームではなくわざわざ http スキームで配布しているのは、 Google Chrome の野郎が file スキームだとプロキシ自動設定ファイルを無視しやがるからです…。 FirefoxIE は file スキーム(ローカルファイルアクセス)でも動作するのになあ。

というわけで、 Fiddler にせよ、 Charles にせよ、集中 HTTP モニターはとてもありがたいですね!レッツ使おう! HTTP モニタープロキシ!