# -*- coding: utf-8 -*-
# @Author: wangkun
# @Time: 2023/9/20
import mitmproxy.http
from mitmproxy import options
from mitmproxy.addons import dump
from mitmproxy.tools.dump import DumpMaster
# from mitmproxy.addons import DumpAddon
from common.common import Common  # 导入封装好的 log 记录方法


class MyAddon:
    @staticmethod
    def request(flow: mitmproxy.http.HTTPFlow):
        # 获取请求数据
        request_data = flow.request.get_text()

        # 调用 log 记录方法，将请求数据传递给它
        Common.logger('mitm', 'dev').info(request_data)

    @staticmethod
    def response(flow: mitmproxy.http.HTTPFlow):
        # 获取响应数据
        response_data = flow.response.get_text()

        # 调用 log 记录方法，将响应数据传递给它
        Common.logger('mitm', 'dev').info(response_data)


def start_mitmproxy():
    # 创建 mitmproxy 的选项
    mitmproxy_options = options.Options(listen_host='0.0.0.0', listen_port=8888)

    # 创建代理配置
    # proxy_config = ProxyConfig(options=mitmproxy_options)

    # 创建 DumpAddon 以将请求和响应保存到日志文件
    dump_addon = dump.Dump()

    # 创建 MyAddon 实例
    my_addon = MyAddon()

    # 将 MyAddon 添加到 mitmproxy 的插件中
    dump_addon.addons.append(my_addon)

    # 创建 DumpMaster，使用代理配置和 DumpAddon
    dump_master = DumpMaster(options=mitmproxy_options, with_termlog=False, with_dumper=dump_addon)

    # 启动 mitmproxy
    dump_master.run()


start_mitmproxy()