mitmproxy实现接口信息抓取

对于没有接口文档的系统,能不能快速获得接口信息,或者说在做功能测试的时候就得到接口测试的一些基本信息。这里就要用到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脚本
  • 添加证书
    1. 配置好代理,并启动代理后, 浏览器进入mitm.it, 选择相应的证书,下载。
    2. 选项—隐私与安全—安全—证书—查看证书, 您的证书中导入下载的证书, 在“证书颁发机构”中找到mitmproxy, 编辑信任,勾选相应条目。

抓取接口信息

  1. 创建脚本

    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
    43
    from 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()
    ]
  2. 设置firefox代理
    设置本地Firefox代理,商品为9999

  3. 运行mitmdump

    1
    mitmdump -p 9999 -s a.py --ignore all hosts with https/ssl
  4. 打开测试网站操作

  5. 查看结果
唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!