mitmproxy抓包 | Python实时生成接口自动化用例(三)
抓包工具mitmproxy | mitmweb基本用法(二)
前面已经给大家分享了mitmproxy的环境配置和基本使用,文章浏览量很高,相信对抓包工具感兴趣的朋友,已经熟练运用起来了。
这期给大家分享下mitmproxy结合python脚本对抓包信息的(请求头、请求头、接口url、请求方式、响应头、响应体等)进行监控,实时抓取数据并存储到文件里,实现了接口自动化测试中的接口用例设计自动化,无需花费大量时间手动编写接口用例,大大提高了工作效率,相信很多人看到这里已经欣喜难耐了,一定要关注下方公众号,有更多精彩技术文章。
一、mitmproxy介绍
mitmproxy是Python编写的一款功能完善的代理工具,mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改它们的交互式中间人代理工具。最强大之处在于对python脚步的支持,它提供了Python API给开发者编写插件用来自定义对流量进行处理和修改,可以在python代码中直接处理数据包。
二、mitmproxy的功能:
1、拦截HTTP和HTTPS请求和响应
2、保存HTTP会话并进行分析
3、模拟客户端发起请求,模拟服务器端返回响应
4、利用反向代理将流量转发给指定的服务器
5、支持Mac和linux上的透明代理
6、利用Python对HTTP请求与响应进行实时处理
三、环境
1、部署python环境
2、安装mitmproxy,pip install mitmproxy
mitmproxy提供了HTTP、WebSocket、TCP事件。本次只考虑HTTP事件,HTTP事件提供一些api,详情参考https://docs.mitmproxy.org/stable/addons-events/
四、启动web抓包,抓包信息全量存入文件
1、cmd下执行:
mitmweb -p 8889 -w C:\Users\la\Desktop\test.txt
启动抓包服务,实时抓取全量数据存入文件
2、自动打开web抓包页面
3、边抓包,边将抓包的全量信息实时存入文件
五、python脚本
编写python脚本,获取接口(请求头、请求头、接口url、请求方式、响应头、响应体等)需要的信息,脚本变更,保存后实时同步,无需重新启动抓包服务
import mitmproxy.http
import csv,json
class CaptureInfoWriteFile:
def __init__(self):
pass
def request(self, flow: mitmproxy.http.HTTPFlow):
flow_request = flow.request # 获取请求对象
self.url = flow_request.url # 接口url
self.host = flow_request.host # 域名
self.path = flow_request.path # 接口地址
self.method = flow_request.method # 请求方式
self.content = flow_request.content
self.timestamp_start = flow_request.timestamp_start # 请求开始时间戳
self.timestamp_end = flow_request.timestamp_end # 请求结束时间戳
self.header = flow_request.headers # 请求头
self.text = flow_request.text # 请求体
def response(self, flow: mitmproxy.http.HTTPFlow):
flow_response = flow.response # 获取响应对象
response_status_code = flow_response.status_code # 响应状态码
response_text = flow_response.text # 响应体
response_content = flow_response.content
response_timestamp_start = flow_response.timestamp_start # 响应开始时间
response_timestamp_end = flow_response.timestamp_end # 响应结束时间
response_header = flow_response.headers # 响应头
with open(r'C:\Users\xia\Desktop\test15.csv', 'a+',newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows([[self.url, self.host, self.path, self.method, self.header, self.text, response_status_code, response_header, response_text]])
addons = [CaptureInfoWriteFile()]
六、启动web抓包,调用python脚本
1、cmd下执行:
mitmweb -p 8889 -s C:\Users\xia\Desktop\test_maplocal.py
启动抓包服务,实时监控获取抓包信息
2、自动打开web抓包页面
3、边抓包,边调用python脚本,将获取的抓包信息实时存储到文件里,方便接口自动测试使用