You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用mitmproxy拦截并修改API返回的JSON响应体字段值

问题排查与解决方法

你之前的脚本存在几个核心错误:

  • 第一个脚本错误引用了不存在的data根键,也没有按数组结构取Tickets的元素,同时Python原生布尔值为大写False,你写的小写false会直接触发变量未定义报错
  • 第二个脚本错误地将布尔值false改为了字符串"false",和接口原本的布尔值类型不匹配,会导致业务侧校验不通过
  • 你使用的精确URL匹配容错率极低,如果接口带查询参数、或者实际请求的URL和你写的不完全一致,匹配逻辑就不会触发

可用修改脚本

from mitmproxy import http
import json

def response(flow: http.HTTPFlow) -> None:
    # 改用包含匹配,只要URL包含接口路径就触发,避免参数、域名前缀差异导致匹配失败
    if "example.com/api/v1/something" in flow.request.pretty_url:
        # 仅处理正常响应,避免修改异常返回
        if flow.response.status_code != 200:
            return
        try:
            data = json.loads(flow.response.text)
            # 遍历所有Tickets下的对象,避免只修改第一个的问题
            if "Tickets" in data and isinstance(data["Tickets"], list):
                for ticket in data["Tickets"]:
                    if "ticketAvailable" in ticket:
                        ticket["ticketAvailable"] = False
            # 写回修改后的数据
            flow.response.text = json.dumps(data)
            # 清除原有Content-Length头,mitmproxy会自动重新计算长度,避免内容截断
            flow.response.headers.pop("Content-Length", None)
        except:
            # 解析出错时不修改原响应,避免影响正常请求
            pass

生效注意事项

  • 运行脚本时执行命令:mitmproxy -s 你的脚本文件名.py
  • 确保请求设备已经正确安装mitmproxy的根证书,且全量流量已经走mitmproxy代理
  • 如果目标接口启用了HTTPS证书绑定,mitmproxy无法正常解密响应,脚本自然不会生效

内容的提问来源于stack exchange,提问作者riwejak558

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:27:06