Help us understand the problem. What is going on with this article?

mitmproxy に独自の content view を追加する

More than 1 year has passed since last update.

content view とは

mitmproxy はリクエスト・レスポンスの中身を表示する際に、表示する形式を選ぶことができます。

image.png

この形式ごとに表示する仕組みを 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 が追加されていたら成功です。

image.png

参考リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした