【就业班1期】雪球app抓包与mock实战

课堂 ppt

https://pdf.ceshiren.com/jy1/雪球app抓包与mock实战

PPT地址

实战内容

参考链接

Charles mock 实战

url 组成

https://stock.xueqiu.com/v5/stock/batch/quote.json?_t=1HUAWEIf4e71a35b852e356fb5871d8a7079206.6563601892.1630131730312.1630131792026&_s=5b5e34&x=0.29&symbol=SZ000012%2CSZ123111%2CSZ000002%2CSH601318%2CSH601012%2CSH600809%2CSH600436%2CSZ000799%2CSZ002241%2C00981&extend=detail

  • 协议类型:https
  • 域名:stock.xueqiu.com
  • 端口:使用的默认端口,省略
  • 路径:/v5/stock/batch/quote.json
  • 请求参数:? 后面的内容,参数之间用 & 分割

Charles Rewrite

原理

设置方法

  1. Tools → Rewrite
  2. 勾选 Enable Rewrite
  3. 点击下方 Add 按钮新建一个重写的规则
  4. 在右侧编辑重写规则
  5. 点击 ok 生效

使用场景:动态的修改请求和响应中的数据

Map Local

原理

操作步骤

  1. 准备接口响应数据
  2. 配置 Map Local
  • 选择要进行 Map Local 的接口
  • 鼠标右键 – 选择 Map Local 选项进入设置界面
  • Map From 填写接口的信息
  • Map To 选择本地文件
  1. 修改 Map Local 配置:Tools – Map Local

应用场景:修改响应数据

Map Remote

原理

操作步骤

  1. 选择接口,点击鼠标右键,选择 Map Remote 进入到设置页面
  2. 设置重定向的接口信息
  3. 点击 ok 生效
  4. 修改设置:Tools – Map Remote 找对对应接口双击进入修改界面

应用场景:切换测试环境

Mitmproxy 安装配置

  1. python 安装
// 方式一
pip install mitmproxy==5.2.0
 
// 方式二
pip install pipx
pipx install mitmproxy==5.2.0

环境验证

mitmdump --version

安装证书

  1. 配置本地网络代理,指定监听的端口 8999
  2. 启动代理工具
mitmdump -p 8999
  1. 浏览器访问 mitm.it 安装证书
  2. 选择对应系统下的证书进行安装

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 的配置截图和雪球的效果截图,回复到帖子中

课后调查表

1.用 Charles MapLocal 修改雪球行情页面,把股票名称改成自己的名字



2.用 Charles Rewrite 实现股票颜色变化的边界值测试


3.Charles Remot

  • 用 Charles MapLocal 修改雪球行情页面,把股票名称改成自己的名字


image

  • 用 Charles Rewrite 实现股票颜色变化的边界值测试
    当涨跌幅等于0时:

image

当涨跌幅等于0.01时:

image

当涨跌幅等于-0.01时:

image

  • 用 Charles MapLocal 修改雪球行情页面,把股票名称改成自己的名字


    雪球-1

  • 用 Charles Rewrite 实现股票颜色变化的边界值测试
    charles-配置-2
    雪球-颜色

改名字:


边界值:

完成的很好

完成的很好

完成的很好

完成的很好

完成的很好

改内容:
85499f74afe82b653479052abd09eb2

边界值:

修改信息
修改信息
修改响应中Body信息

添加、修改请求中参数

添加响应中头信息

image