文章目录
首先还是要先安装依赖环境
pip install mitmproxy
mitmproxy 提供了三个命令,启动模式不同
mitmproxy -> 提供一个命令行界面(该命令不支持windows)。
mitmdump -> 提供一个简单的终端输出。
mitmweb -> 提供一个浏览器界面。
启动监听
mitmdump -w d://log.txt
Proxy server listening at http://*:8080
# 该命令会占用本地8080端口,将监听的数据写入到 d://log.txt 文件中。
证书的安装,分2中:
- 通过访问连接:http://mitm.it/ 来安装证书
- 接着在.mitmproxy目录找到CA证书,如下图所示
mitmdump的密令参数
-s “script.py --bar” # 执行脚本,通过双引号来添加参数
-n 不启动代理
-r 读取文件内容
-w 写入文件
~s 过滤响应数据
~q 过滤请求数据
mitmdump -p 8999 -w baidu.txt
配合Python脚本,下面开始演示,先新建一个py文件(lyc.py)
def request(flow):
# 获取请求对象
request = flow.request
# 实例化输出类
info = ctx.log.info
# 打印请求的url
info(request.url)
# 打印请求方法
info(request.method)
# 打印host头
info(request.host)
# 打印请求端口
info(str(request.port))
# 打印所有请求头部
info(str(request.headers))
# 打印cookie头
info(str(request.cookies))
# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):
# 获取响应对象
response = flow.response
# 实例化输出类
info = ctx.log.info
# 打印响应码
info(str(response.status_code))
# 打印所有头部
info(str(response.headers))
# 打印cookie头部
info(str(response.cookies))
# 打印响应报文内容
info(str(response.text))
#启动命令
mitmdump.exe -s lyc.py
具体示例1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:chenshifeng
@file:test_maplocal.py
@time:2020/11/29
"""
from mitmproxy import http
def request(flow: http.HTTPFlow):
# 修改判断条件
if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
# 打开保存在本地的数据文件
with open("/Users/chenshifeng/MyCode/PythonCode/SFDSZL/interface/quote.json") as f:
# 创造一个 response
flow.response = http.HTTPResponse.make(
200, # (optional) status code
# 读取文件中数据作为返回内容
f.read(),
# 指定返回数据的类型
{"Content-Type": "application/json"} # (optional) headers
)
具体示例2.1:
from mitmproxy import ctx
import json
def response(flow):
start_url = "https://blog.csdn.net/community/home-api/v1/get-fans-list"
response = flow.response
if flow.request.url.startswith(start_url):
text = response.text
data = json.loads(text)
print(data)
具体示例2.2:
import json
class GetFans(object):
def response(self, flow):
start_url = "https://blog.csdn.net/community/home-api/v1/get-fans-list"
response = flow.response
if flow.request.url.startswith(start_url):
text = response.text
data = json.loads(text)
print(data)
addons = [
GetFans()
]
未完待续…