mitmproxy 的拦截与修改功能是其核心价值,能够实时干预 HTTP/HTTPS 流量,常用于接口调试、爬虫数据抓取、测试验证等场景。其核心优势在于命令行交互(mitmproxy)、图形化界面(mitmweb) 和脚本化扩展(mitmdump)
安装
pip install mitmproxy然后需要安装下ca证书
写几个案例
"""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]"""Modify HTTP query parameters."""
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
flow.request.query["mitmproxy"] = "rocks""""
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()]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}")