当前位置: 首页 > article >正文

GoReplay工具middlware使用(python版本)

目录

GoReplay的middlware原理

python版本环境搭建

python环境安装

gor库环境安装

python代码编写

goreplay中间件使用


官方文档地址:https://github.com/amyangfei/GorMW

GoReplay的middlware原理

中间件是一个程序,它在 STDIN 上接受请求和响应负载,并在 STDOUT 上发出修改后的请求。您可以实现任何自定义逻辑,例如剥离私有数据、高级重写、支持 oAuth 等。

中间件可以用任何语言编写,请参阅examples/middleware文件夹中的示例。
中间件程序应该接受这样一个事实:所有与 Gor 的通信都是异步的,不能保证原始请求和响应消息会相继到来。如果逻辑依赖于原始或重播的响应,您的应用程序应该处理状态,请参见examples/middleware/token_modifier.go示例。+

python版本环境搭建

python环境安装

首先安装python环境,由于版本 v0.2.x 不再支持 Python2.7 和 Python3.4,因此支持的最低 Python 版本为 3.5.2。此外,v0.1.x 版本仍然兼容 Python2.7 和 Python3.4。“
python版本,建议使用3.5.2以上版本。我这里演示用的Python 3.9.6

安装好python环境后,使用python3 -V查看自己的版本号,出现版本号说明环境已经安装完成

gor库环境安装

在python环境中使用pip3命令安装gor库,gor版本建议下载最新版,我这里用的是gor 0.2.3版本

pip3 install gor

如果需要使用虚拟环境,需要先进入虚拟环境再安装,pycharm自带了虚拟环境,如果当面文件存在venv文件夹说明已有虚拟环境,进入自带的虚拟环境安装

source venv/bin/activate

看到前面出现venv,说明成功进入虚拟环境

在python中导入gor库,没有报错说明gor库环境安装完成

from gor.middleware import AsyncioGor

python代码编写

首先导入gor库

from gor.middleware import AsyncioGor

然后在代码内定义三个函数,分别负责请求,响应,重播的处理

以下是一个简单的demo,具体的使用可以查看官方文档,gor官网文档

# coding: utf-8
import sys
from gor.middleware import AsyncioGor


def on_request(proxy, msg, **kwargs):
    proxy.on('response', on_response, idx=msg.id, req=msg)

def on_response(proxy, msg, **kwargs):
    proxy.on('replay', on_replay, idx=kwargs['req'].id, req=kwargs['req'], resp=msg)

def on_replay(proxy, msg, **kwargs):
    replay_status = proxy.http_status(msg.http)
    resp_status = proxy.http_status(kwargs['resp'].http)
    if replay_status != resp_status:
        sys.stderr.write('replay status [%s] diffs from response status [%s]\n' % (replay_status, resp_status))
    else:
        sys.stderr.write('replay status is same as response status\n')
    sys.stderr.flush()

if __name__ == '__main__':
    proxy = AsyncioGor()
    proxy.on('request', on_request)
    proxy.run()

goreplay中间件使用

中间件跟命令结合使用,先后顺序为,先中间件处理,处理完再使用命令进行过滤,过滤的命令应该是中间件处理完的数据,具体顺序如下

需要同时处理req、res、rep,可以使用如下命令

gor --input-raw :5000 --output-stdout --middleware 'python3 middleware.py' --output-http-track-response --input-raw-track-response --output-http 'http://127.0.0.1:5000'

常见问题:

1、在middleware处理流量的时候,经常会报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3979: invalid start byte

解决方案:忽略就行,不影响middleware处理

2、python版本的效率低

解决方案:替换成nodejs版本的,参考https://github.sheincorp.cn/buger/goreplay/tree/master/middleware


http://www.kler.cn/a/421888.html

相关文章:

  • 云原生和数据库哪个好一些?
  • case判断年份是否为闰年
  • redis 从16db块 加到32db块
  • Goland2024.3 发布,有点东西
  • 开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型
  • [高等数学学习记录] 泰勒公式
  • 【Linux】vim编辑器
  • ORB-SLAM2 ----- LocalMapping::ComputeF12和ORBmatcher::CheckDistEpipolarLine
  • C++ 封闭函数局部变量不能在 lambda 体中引用,除非其位于捕获列表中
  • Golang教程第25篇(并发)
  • G0、G1、G2连续在曲线和曲面的设计和制造中重要性体现在哪里
  • 工业智能网关在该企业中的应用实践
  • 【Leetcode 每日一题】LCR 190. 加密运算
  • 3D姿势和跟踪的人体行为识别
  • Linux条件变量线程池详解
  • 网络安全漏洞原理利用与渗透
  • 类和对象下
  • Kubernetes 01
  • pytorch中model.eval的理解
  • c语言几道易错题