mitmproxy+python实现接口rewrite功能

环境:

mitmproxy5.2  python3.7  chrome配置proxy代理127.0.0.1:8080

 

原理:

mitmproxy官方文档 https://docs.mitmproxy.org/stable/addons-events/

 

 

mitmproxy提供了一种HTTP Events插件,当python脚本发起http请求时,mimt会捕获到相应请求,通过调用该插件,可以对response/request等消息进行修改。

rewrite就是针对response修改的一种应用场景。

 

举例:

比如针对某app或应用,需要测试不同数值时UI展示是否正确,直接修改数据库比较麻烦,且容易引发权限等问题。

这时候rewrite就诞生了,由于UI展示来源于接口,只需要修改接口相关信息就实现上述场景。

 

# -*- coding:utf-8 -*-
# author:xjw
# date=2021/4/6

"""
Basic skeleton of a mitmproxy addon.

Run as follows: mitmproxy -s anatomy.py
"""
import json

from mitmproxy import ctx, http

class AD:
    def request(self, flow):
        pass
    def response(self, flow: http.HTTPFlow):
        # 判断请求的url 是否包含指定的url信息
        if "https://stock.xueqiu.com/v5/stock/batch/quote.json?_t=" in flow.request.pretty_url:
            # 拿到响应数据信息
            # flow.response.text 是str 属性,所以如果要是操作
            # 这个对象的话,必须转换为python 字典的数据结构
            # 否则就只能使用和str 相关的 方法
            data = json.loads(flow.response.text)
            data["data"]["items"][0]["quote"]["name"] = "测试人"
            flow.response.text = json.dumps(data)
# addons 是mitmproxy 的强制要求的规范
# 一定要使用此变量名存放类的实例
addons = [
    AD()
]

  

 

posted @ 2021-04-07 10:20  第五个季节xjw  阅读(296)  评论(0)    收藏  举报