シンプルでカスタマイズしやすいHTTPプロクシ "SimpleHTTPProxy" を作った

簡単にカスタマイズできるHTTPプロクシが欲しかったのだけど、Webを探してみてもちょうどよいものがなかったので作った。

ターミナルで、PythonのSimpleHTTPServerモジュールと同じように

$ python -m SimpleHTTPProxy

と叩くと、ローカルホストのtcp/8080に何もしないプロクシサーバが立ち上がる。 もちろん、マルチスレッドで動作。 標準モジュールのみで書かれているので、外部パッケージをインストールする必要もない。

これだけではたいしたことはないのだが、下のようにSimpleHTTPProxyHandlerを継承してハンドラをオーバーライドするだけで、プロクシの挙動を柔軟にカスタマイズすることができる。

#!/usr/bin/env python
# RemoveIframeProxy.py

from SimpleHTTPProxy import SimpleHTTPProxyHandler, test
import re

class ReplaceContentProxyHandler(SimpleHTTPProxyHandler):
    def response_handler(self, headers, body):
        content_type = headers.get('Content-Type', '')
        if content_type.startswith('text/html'):
            return re.sub(r'<iframe[\s\S]+?</iframe>', '&lt;iframe removed&gt;', body)


if __name__ == '__main__':
    test(HandlerClass=ReplaceContentProxyHandler)
$ python -m RemoveIframeProxy

このプロクシは、HTMLコンテンツに含まれるiframe要素をすべて削除する。 リポジトリには他にもサンプルとして、image/* タイプを持つ画像ファイルをローカル保存するプロクシや、Amazonの商品ページURLを強制リダイレクトで正規化するプロクシなどが用意してある。

自分でコードを書く必要はあるけど、自由度の高いProxomitronのような感じで便利に使えると思う。