对于没有接口文档的系统,能不能快速获得接口信息,或者说在做功能测试的时候就得到接口测试的一些基本信息。这里就要用到mitmproxy: mitmproxy is a free and open source interactive HTTPS proxy.
在windows和Firefox下实验。
安装
pip直接安装:pip install mitmproxy
基本使用
- 命令行启动
mitmdump - 常用参数
-p 指定端口号
-w outfile 将日志输出到本地文件
–ignore all hosts with https/ssl 忽略https 证书错误 (–ignore-hosts “.*443$”)
-s 加载自定义python脚本 - 添加证书
- 配置好代理,并启动代理后, 浏览器进入mitm.it, 选择相应的证书,下载。
- 选项—隐私与安全—安全—证书—查看证书, 您的证书中导入下载的证书, 在“证书颁发机构”中找到mitmproxy, 编辑信任,勾选相应条目。
抓取接口信息
创建脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43from mitmproxy import http, ctx
import openpyxl,time,json
class Record:
def __init__(self):
self.filter_url = 'https://reqres.in/api/'
self.cur_time = time.strftime('%Y%m%d_%H_%M_%S')
book = openpyxl.Workbook()
table = book.active
table.append(['Address', 'Request Type', 'Param Type',
'Header', 'Param'])
book.save('E:/{cur_time}.xlsx'.format(cur_time=self.cur_time))
self.workbook = openpyxl.load_workbook('e:/{cur_time}.xlsx'.format(tmp=self.cur_time))
self.workbook.active.title = 'API'
self.table = self.workbook.active
def write_to_excel(self, flow):
url = flow.request.url
method = flow.request.method
type = flow.request.headers.get('Content-Type')
if type == 'application/x-www-form-urlencoded':
type = 'URL_ENCODE'
elif type == 'application/json':
type = 'JSON'
elif type == 'text/xml':
type = 'XML'
headers = json.dumps(dict(flow.request.headers))
body = flow.request.get_text()
self.table.append([url, method, type, headers, body])
self.workbook.save('e:/{cur_time}.xlsx'.format(cur_time=self.cur_time))
def response(self, flow):
if self.filter_url:
if flow.request.url.startswith(self.filter_url):
self.write_to_excel(flow)
else:
self.write_to_excel(flow)
addons = [
Record()
]设置firefox代理
设置本地Firefox代理,商品为9999运行mitmdump
1
mitmdump -p 9999 -s a.py --ignore all hosts with https/ssl
打开测试网站操作
- 查看结果