首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >mitmproxy 几个小demo

mitmproxy 几个小demo

作者头像
小田测测看
发布2026-06-17 17:54:33
发布2026-06-17 17:54:33
410
举报

mitmproxy 的拦截与修改功能是其核心价值,能够实时干预 HTTP/HTTPS 流量,常用于接口调试、爬虫数据抓取、测试验证等场景。其核心优势在于命令行交互(mitmproxy)图形化界面(mitmweb)脚本化扩展(mitmdump)

安装

代码语言:javascript
复制
pip install mitmproxy

然后需要安装下ca证书

写几个案例

http-modify-form

代码语言:javascript
复制
"""Modify an HTTP form submission."""

from mitmproxy import http


def request(flow: http.HTTPFlow) -> None:
    if flow.request.urlencoded_form:
        # If there's already a form, one can just add items to the dict:
        flow.request.urlencoded_form["mitmproxy"] = "rocks"
    else:
        # One can also just pass new form data.
        # This sets the proper content type and overrides the body.
        flow.request.urlencoded_form = [("foo", "bar")]  # type: ignore[assignment]

http-modify-query-string

代码语言:javascript
复制
"""Modify HTTP query parameters."""

from mitmproxy import http


def request(flow: http.HTTPFlow) -> None:
    flow.request.query["mitmproxy"] = "rocks"

filter-flows

代码语言:javascript
复制
"""
Use mitmproxy's filter pattern in scripts.
"""

from __future__ import annotations

import logging

from mitmproxy import flowfilter
from mitmproxy import http
from mitmproxy.addonmanager import Loader


classFilter:
    filter: flowfilter.TFilter

    defconfigure(self, updated):
        if"flowfilter"in updated:
            self.filter = flowfilter.parse(".")

    defload(self, loader: Loader):
        loader.add_option("flowfilter", str, "", "Check that flow matches filter.")

    defresponse(self, flow: http.HTTPFlow) -> None:
        if flowfilter.match(self.filter, flow):
            logging.info("Flow matches filter:")
            logging.info(flow)


addons = [Filter()]

mock data

代码语言:javascript
复制
from mitmproxy import http

defresponse(flow: http.HTTPFlow) -> None:
    # 拦截条件:匹配商品详情接口
    if"/api/goods/detail"in flow.request.pretty_url:
        # 构造 Mock 响应
        mock_response = {
            "code": 200,
            "msg": "success",
            "data": {"id": 1, "name": "拦截后修改的商品", "price": 0}
        }
        # 替换响应内容
        flow.response.text = str(mock_response).replace("'", '"')  # 转为 JSON 字符串
        flow.response.status_code = 200# 修改状态码
        print(f"已替换响应:{flow.request.pretty_url}")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拾光 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • http-modify-form
  • http-modify-query-string
  • filter-flows
  • mock data
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档