# -*- coding: utf-8 -*- """ @File : record.py @Time : 2023/9/7 19:10 @Author : geekbing @LastEditTime : - @LastEditors : - @Description : 流量录制->生成case功能 """ import json import re from backend.utils.redis_manager import RedisHelper from apps.schema.request import RequestInfo class Recorder: def request(self, flow): flow.request.headers["X-Forwarded-For"] = flow.client_conn.address[0] async def response(self, flow): if ( "47.119.28.171" in flow.request.url or flow.request.method.lower() == "options" or flow.request.url.endswith(("js", "css", "ttf", "jpg", "svg", "gif")) ): # 如果是options请求,js等url直接拒绝 return addr = flow.client_conn.address[0] record = RedisHelper.get_address_record(addr) if not record: return data = json.loads(record) user_id = data.get("user_id", "") pattern = re.compile(data.get("regex")) if re.findall(pattern, flow.request.url): # 说明已开启录制开关,记录状态 request_data = RequestInfo(flow) dump_data = request_data.dumps() await RedisHelper.cache_record(user_id=user_id, request=dump_data) # TODO: 下个版本需要加入ws协议的支持