mitmproxy+python做拦截代理,自动生成接口测试用例
1.mitmproxy安装
python版本3.6以上,输入安装命令pip3 install mitmproxy
安装完成后输入命令mitmdump --version验证
应当可以看到类似于这样的输出:

2.编写py代码,定义addons
import mitmproxy.http
from mitmproxy import ctx
class Counter:
def __init__(self):
self.num = 0
def request(self, flow: mitmproxy.http.HTTPFlow):
self.num = self.num + 1
ctx.log.info("We've seen %d flows" % self.num)
addons = [
Counter()
]
3.启动mitmweb
输入命令 mitmweb -s addons.py

request就是在请求阶段拦截,并自定义自己想要输入的信息,其他详情方法见文末
4. 启动谷歌作为代理浏览器进行监听
打开 cmd,执行:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
这样在谷歌浏览器进行的接口访问,就会被记录下来
HTTP生命周期介绍
def http_connect(self, flow: mitmproxy.http.HTTPFlow):
(Called when) 收到了来自客户端的 HTTP CONNECT 请求。在 flow 上设置非 2xx 响应将返回该响应并断开连接。CONNECT 不是常用的 HTTP 请求方法,目的是与服务器建立代理连接,仅是 client 与 proxy 的之间的交流,所以 CONNECT 请求不会触发 request、response 等其他常规的 HTTP 事件。
def requestheaders(self, flow: mitmproxy.http.HTTPFlow):
(Called when) 来自客户端的 HTTP 请求的头部被成功读取。此时 flow 中的 request 的 body 是空的。
def request(self, flow: mitmproxy.http.HTTPFlow):
(Called when) 来自客户端的 HTTP 请求被成功完整读取。
def responseheaders(self, flow: mitmproxy.http.HTTPFlow):
(Called when) 来自服务端的 HTTP 响应的头部被成功读取。此时 flow 中的 response 的 body 是空的。
def response(self, flow: mitmproxy.http.HTTPFlow):
(Called when) 来自服务端端的 HTTP 响应被成功完整读取。
def error(self, flow: mitmproxy.http.HTTPFlow):
(Called when) 发生了一个 HTTP 错误。比如无效的服务端响应、连接断开等。注意与“有效的 HTTP 错误返回”不是一回事,后者是一个正确的服务端响应,只是 HTTP code 表示错误而已。
mitmproxy 的 HTTPFlow 对象包含了关于 HTTP 请求和响应的详细信息。以下是一些常用的属性:
请求相关(flow.request):
flow.request.method: HTTP 请求方法(如 "GET", "POST" 等)。flow.request.url: 完整的请求 URL。flow.request.scheme: 请求使用的协议(如 "http" 或 "https")。flow.request.host: 请求的目标主机名。flow.request.port: 请求的目标端口。flow.request.path: 请求的路径。flow.request.http_version: HTTP 版本。flow.request.headers: 请求头,一个包含所有 HTTP 请求头的字典。flow.request.cookies: 请求中的 cookies。flow.request.content: 请求体的内容。flow.request.query: 查询参数。flow.request.timestamp_start: 请求开始的时间戳。flow.request.timestamp_end: 请求结束的时间戳。
响应相关(flow.response):
flow.response.status_code: HTTP 响应状态码(如 200, 404 等)。flow.response.reason: HTTP 响应的原因短语(如 "OK", "Not Found" 等)。flow.response.headers: 响应头,一个包含所有 HTTP 响应头的字典。flow.response.cookies: 响应中的 cookies。flow.response.content: 响应体的内容。flow.response.timestamp_start: 响应开始的时间戳。flow.response.timestamp_end: 响应结束的时间戳
浙公网安备 33010602011771号