content view とは
mitmproxy はリクエスト・レスポンスの中身を表示する際に、表示する形式を選ぶことができます。
この形式ごとに表示する仕組みを mitmproxy では content view と呼びます。
html, css, json など基本的なものは標準で用意されています。
独自の content view を作る
mimproxy はPythonで拡張できるので、オリジナルの content view も作れちゃいます!
公式のgithubリポジトリに実例がある
ので、そのコードを例に解説します。
この例は「リクエスト・レスポンスの中身の大文字小文字を入れ替えて表示」というものです。
custom_contentview.py
from mitmproxy import contentviews
# contentviews.View を継承したクラスを作る
class ViewSwapCase(contentviews.View):
name = "swapcase"
# CUIで起動した際に、この表示を適用するショートカットキーを指定
prompt = ("swap case text", "z")
content_types = ["text/plain"]
# ここにメインの中身書き換え処理をいれる
# data: リクエスト・レスポンスの中身
# metadata: metadata["headers"] でHTTPヘッダを見ることができる
def __call__(self, data, **metadata):
return "case-swapped text", contentviews.format_text(data.swapcase())
view = ViewSwapCase()
def load(l):
contentviews.add(view)
def done():
contentviews.remove(view)
load と start
自分の手元のmitmproxyではこのままでは上手く読み込めませんでした。
mitmproxyのソースコードを見て色々やった結果 def load(l)
を def start()
に変えることで読み込みに成功しました。
-def load(l):
+def start():
contentviews.add(view)
mitmproxyのgithubをみると、途中で start
から load
に書き換えられているので、動かしているバージョンの違いみたいですね。
拡張スクリプトを入れた状態で起動する
mitmproxy
(または mitmweb
, mitmdump
)コマンドの引数に -s
をつけてスクリプトファイルのパスを追加すればOKです。
自分は Windows 環境で mitmproxy
が使えないため mitmweb
を使ってます。
mitmweb -s custom_contentview.py
これで、リクエスト・レスポンスの形式選択に swapcase が追加されていたら成功です。