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()
]
浙公网安备 33010602011771号