使用 mitmdump 实现 HTTP 流量捕获与数据导出
通过 mitmdump 工具可以实现对 HTTP/HTTPS 请求的实时监听与数据提取,类似于性能测试工具 LoadRunner 的脚本录制功能。该方法结合 Python 脚本可将请求信息自动保存为结构化数据,便于后续用于接口测试或自动化场景构建。
环境准备
安装 mitmproxy 套件:
pip install mitmproxy
mitmproxy 提供三个主要组件:
- mitmproxy:终端下的交互式抓包工具
- mitmweb:基于 Web UI 的图形化界面
- mitmdump:命令行模式,支持加载自定义 Python 脚本处理流量
前置配置
- 若需抓取 HTTPS 流量,需在目标设备上安装 mitmproxy 根证书(访问
http://mitm.it下载并安装) - 设置系统或浏览器代理为:
127.0.0.1:8080
Python 脚本示例
以下脚本用于监听指定域名的请求,并提取关键字段写入 Excel 文件:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from mitmproxy import http
import xlwt
class RequestCapture:
def __init__(self, target_host: str = "192.168.**.***", output_file: str = "./data/request_output.xls"):
self.host_filter = target_host
self.output_path = output_file
self.recorded_data = []
# 定义表头字段
self.headers = [
"Method",
"Full URL",
"Host",
"Path",
"Query Params (Text)",
"Request Body",
"Headers",
"Cookies"
]
self.recorded_data.append(self.headers)
def request(self, flow: http.HTTPFlow) -> None:
url = flow.request.pretty_url
host = flow.request.host
if self.host_filter in host:
print("\n" + "="*50)
print("捕捉到目标请求,正在记录...")
print("="*50)
method = flow.request.method
path = flow.request.path
query_text = flow.request.get_text() or ""
body_text = flow.request.text or ""
header_dict = dict(flow.request.headers)
cookies_dict = dict(flow.request.cookies)
# 打印捕获内容
print(f"请求方式: {method}")
print(f"完整地址: {url}")
print(f"主机名: {host}")
print(f"路径: {path}")
print(f"查询参数: {query_text}")
print(f"请求体: {body_text}")
print(f"请求头: {header_dict}")
print(f"Cookies: {cookies_dict}")
# 构建数据行
entry = [
method,
url,
host,
path,
query_text,
body_text,
str(header_dict),
str(cookies_dict)
]
self.recorded_data.append(entry)
self.save_to_excel()
def save_to_excel(self):
try:
workbook = xlwt.Workbook(encoding='utf-8')
sheet = workbook.add_sheet("Captured Requests")
for row_idx, row_data in enumerate(self.recorded_data):
for col_idx, cell_value in enumerate(row_data):
sheet.write(row_idx, col_idx, cell_value)
workbook.save(self.output_path)
print("✅ 数据已成功写入 Excel")
except Exception as e:
print(f"❌ 写入失败: {e}")
# 注册插件
addons = [RequestCapture()]
运行方式
将上述脚本保存为 capture.py,然后在终端执行:
mitmdump -s capture.py
此时所有符合条件的请求将在控制台输出,并实时追加至指定 Excel 文件中。
输出效果
运行后,在用户操作浏览器或移动应用的过程中,脚本会自动捕获通信数据并生成如下格式的表格记录:
- 列包括:请求方法、完整URL、主机、路径、查询参数、请求体、请求头字符串、Cookie信息
- 每条请求对应一行,可用于后期生成测试用例或回放脚本
