课堂 ppt
PPT地址
实战内容
Charles mock 实战
mock 原理
mock 场景
- 前后端数据交互
- 第三方系统数据交互
- 硬件设备解耦
mock 核心要素
- 匹配规则
- 模拟响应
Charles 安装配置
- 下载:https://www.charlesproxy.com/
- 安装配置步骤请参考:Windows下(Win10)Charles从下载安装到证书设置和浏览器抓包测试,亲测!_charles使用教程windows_TesterAllen的博客-CSDN博客
- 安装本地证书
- 安装移动端证书
移动端连接
- 设备和电脑在同一个 wifi 下
- 网络设置
- 安装证书:系统浏览器中输入 chls.pro/ssl
charles 中设置 ssl
charles 新版本
Android 抓包版本问题
Android 6 以上版本默认不信任 Charles 证书,练习需要用 Android 6 及以下系统。mumu Android 6
Android 6 以上版本需要开发配合打开抓包属性
URL 组成
- 协议类型:http https
- 服务主机地址:www.xx.xx ip
- 端口:主机地址:端口
- 路径:/xxxxxx.xx/xx
- 请求参数:xx=xx&yy=yyy
Charles Rewrite
原理
设置方式
- Tools → Rewrite
- 勾选 Enable Rewrite
- 点击下方 Add 按钮增加重写
- 在右侧编辑重写规则
- 上面匹配规则
- 下面响应修改规则
- 点击 ok 生效
使用场景
- 动态修改响应数据
- 修改请求数据
Charles Map Local
原理
设置步骤
- 准备接口响应数据
- 配置 MapLocal:选择对应的接口,鼠标右键–Map Local(自动填写好接口数据)
- Map To 选择本地文件
场景:修改响应数据
Map Remote
原理
设置
- 选定对应接口
- 点击鼠标右键 – Map Remote(自动填写接口信息)
- 填写目标接口信息
- 点击 ok
应用场景:切换测试环境
mitmproxy 安装
pip install mitmproxy==5.2.0
证书安装方式
- 启动 mitmdump 工具
mitmdump -p 8999
- 浏览器访问 mitm.it 下载对应系统证书安装
mitmproxy mock 实战
工具组成
- mitmproxy:命令行工具(win 不支持)
- mitmweb:web UI 工具
- mitmdump:加载 python 脚本
常用参数
- -p 指定抓包端口
- -s 指定加载的 python 脚本
实现 maplocal
修改雪球行情页面的股票名称和价格
from mitmproxy import http
# request 名称不可以改变
# 当 mitmdump 加载这个脚本的时候,当有请求来,就会回调 request 方法
# flow 就是 mitmdump 抓到的接口数据
def request(flow: http.HTTPFlow) -> None:
# 修改判断条件
if "quote.json" in flow.request.pretty_url:
# 打开本地数据文件
with open("/Users/mac/Desktop/quote.json") as f:
# 创建一个响应,返回给客户端
flow.response = http.HTTPResponse.make(
200, # 响应状态码
# 读取文件中的数据作为响应内容
f.read(),
{"Content-Type": "application/json"} # 通过设置头信息指定响应格式
)
启动脚本
mitmdump -p 8999 -s xxx
实现 rewrite
修改雪球行情页面的股票名称和价格
import json
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
# 使用 json loads 方法,把响应转化为 python 对象
data = json.loads(flow.response.content)
# 修改响应内容
data['data']['items'][0]['quote']['name'] = "hogwarts001"
data['data']['items'][1]['quote']['name'] = "hogwarts002"
data['data']['items'][1]['quote']['current'] = 10000
# 把字典转为字符串,赋值给 response 原始数据格式
flow.response.text = json.dumps(data)
启动脚本
mitmdump -p 8999 -s xxx