承認これくしょん

my black histories

Fiddlerでクロスドメイン制約を回避してlocalhostと通信する

ちょっと一般公開されているWebサイトから、クロスドメイン制約を回避してlocalhostと通信したくなりました。
そんな時にWindowsデバッグプロキシであるFiddlerが便利なんですよ。 FiddlerScriptに以下を追記して必要なヘッダーを追加します。
なんとこれ、今では黒歴史感がハンパないJScript.NETらしいです。

static function OnBeforeResponse(oSession: Session) {
    /* 省略 */
    oSession.oResponse["Access-Control-Allow-Origin"] = "*";
    oSession.oResponse["Access-Control-Allow-Headers"] = "*";
    oSession.oResponse["Access-Control-Allow-Methods"] = "*";
}  

既に該当ヘッダーがある場合は上書きしてくれます。
しかし対象ページがHTTPSで配信されている場合、そこからXMLHttpRequestでHTTPリクエストを送信することはできません。
localhost(Sinatra + WEBrick)はHTTPで配信しているので、これでは弾かれてしまいます。
そこで、今度はlocalhost宛のHTTPSリクエストをHTTPにリダイレクトさせましょう。

static function OnBeforeRequest(oSession: Session) {
    /* 省略 */
    if (oSession.HTTPMethodIs("CONNECT"))
    {
        oSession.oFlags["X-ReplyWithTunnel"] = "Fake for HTTPS Tunnel";
        return;
    }
    if (oSession.isHTTPS && oSession.HostnameIs("localhost"))
    {
        oSession.fullUrl = oSession.fullUrl.Replace("https://", "http://");
    }
}

同じように既存メソッドに追記してやります。
CONNECTメソッドに関しては、このように記述することでAutoResponder相当の動作をしてくれるそうです。

参考