课堂 ppt
https://pdf.ceshiren.com/jy1/雪球app抓包与mock实战
PPT地址
实战内容
参考链接
- 环境切换演练环境
- mitmproxy 官网:https://mitmproxy.org/
- mitmproxy 官方文档: Introduction
Charles mock 实战
url 组成
- 协议类型:https
- 域名:stock.xueqiu.com
- 端口:使用的默认端口,省略
- 路径:/v5/stock/batch/quote.json
- 请求参数:? 后面的内容,参数之间用 & 分割
Charles Rewrite
原理
设置方法
- Tools → Rewrite
- 勾选 Enable Rewrite
- 点击下方 Add 按钮新建一个重写的规则
- 在右侧编辑重写规则
- 点击 ok 生效
使用场景:动态的修改请求和响应中的数据
Map Local
原理
操作步骤
- 准备接口响应数据
- 配置 Map Local
- 选择要进行 Map Local 的接口
- 鼠标右键 – 选择 Map Local 选项进入设置界面
- Map From 填写接口的信息
- Map To 选择本地文件
- 修改 Map Local 配置:Tools – Map Local
应用场景:修改响应数据
Map Remote
原理
操作步骤
- 选择接口,点击鼠标右键,选择 Map Remote 进入到设置页面
- 设置重定向的接口信息
- 点击 ok 生效
- 修改设置:Tools – Map Remote 找对对应接口双击进入修改界面
应用场景:切换测试环境
Mitmproxy 安装配置
- python 安装
// 方式一
pip install mitmproxy==5.2.0
// 方式二
pip install pipx
pipx install mitmproxy==5.2.0
环境验证
mitmdump --version
安装证书
- 配置本地网络代理,指定监听的端口 8999
- 启动代理工具
mitmdump -p 8999
- 浏览器访问 mitm.it 安装证书
- 选择对应系统下的证书进行安装
mitmproxy 实战
工具组成
- mitmproxy
- 注意:不支持 windows
- mitmweb
- mitmdump
常用参数
- -p 指定监听端口
- -s 加载 python 脚本
实现 maplocal
maplocal 百度
from mitmproxy import http
# request 名称不能修改
# mitmdump 加载脚本的时候,当有请求来的时候,就会调用 request 方法
def request(flow: http.HTTPFlow):
# 发起请求,判断 url 是不是预期的路径
if flow.request.pretty_url == "https://www.baidu.com/":
# 创造一个响应
flow.response = http.HTTPResponse.make(
200, # 指定响应状态码
b"hogwarts-feier", # 指定响应体
{"Content-Type": "text/html"} # 指定响应头信息
)
启动脚本 mitmdump -p 8999 -s /Users/mac/mitm_demo/rewrite_xueqiu.py
maplocal 雪球
from mitmproxy import http
# request 名称不能修改
# mitmdump 加载脚本的时候,当有请求来的时候,就会调用 request 方法
def request(flow: http.HTTPFlow):
# 修改判断条件
if "quote.json" in flow.request.pretty_url and "x=" 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"}
)
rewrite
雪球行情页面 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:
# 把原始的响应体转化成为 python 中的对象
data = json.loads(flow.response.content)
data['data']['items'][0]['quote']['name'] = "hogwarts001"
data['data']['items'][0]['quote']['current'] = 10
data['data']['items'][1]['quote']['name'] = "hogwarts002"
data['data']['items'][1]['quote']['percent'] = -10
# 把改好的响应转化为字符串,赋值给响应的原始数据格式
flow.response.text = json.dumps(data)
课后作业
- 用 Charles MapLocal 修改雪球行情页面,把股票名称改成自己的名字
- 用 Charles Rewrite 实现股票颜色变化的边界值测试
提交 Charles 的配置截图和雪球的效果截图,回复到帖子中