Просмотр исходного кода

更新任务记录:ReproduceErrorCommand增强完成

notfff 7 месяцев назад
Родитель
Сommit
35b39bf5a8

+ 142 - 0
AiWork/2025年06月/11日15时24分-ReproduceErrorCommand增强支持post字段数据和Content-Type自动检测.md

@@ -0,0 +1,142 @@
+# ReproduceErrorCommand 增强:支持 post 字段数据和 Content-Type 自动检测
+
+## 任务概述
+
+增强 `ReproduceErrorCommand` 命令,默认使用 post 字段的数据,根据 headers 提取数据类型进行请求重放。
+
+## 完成的功能
+
+### 1. 新增命令行选项
+
+- 新增 `--data-source` 选项,支持三种数据源:
+  - `auto`:自动选择,优先使用 post 数据,如果没有则使用 protobuf_json
+  - `post`:强制使用 post 字段数据
+  - `protobuf_json`:强制使用 protobuf_json 字段数据
+
+### 2. Headers 解析增强
+
+- 新增 `parseHeaders()` 方法:解析 headers JSON 字符串
+- 新增 `extractContentType()` 方法:从 headers 中提取 Content-Type
+- 改进 `extractToken()` 方法:复用 headers 解析逻辑
+
+### 3. 数据类型自动检测
+
+- 根据 Content-Type 自动检测数据类型:
+  - `application/json` → JSON 格式
+  - `application/x-protobuf` → Protobuf 二进制格式
+- 支持 post 字段的 base64 解码处理
+
+### 4. 请求重放增强
+
+- 改进 `makeRequest()` 方法,支持不同数据类型:
+  - JSON 格式:设置 `Content-Type: application/json`
+  - Protobuf 格式:设置 `Content-Type: application/x-protobuf`
+- 根据数据类型设置正确的请求头
+
+### 5. 数据预览功能
+
+- JSON 数据:显示解析后的数组结构
+- 二进制数据:显示数据长度和 Base64 预览(前100字符)
+
+## 使用示例
+
+```bash
+# 使用ID查找,自动选择数据源(优先post)
+php artisan debug:reproduce-error 68981433
+
+# 使用request_unid查找
+php artisan debug:reproduce-error request_1749626545371
+
+# 明确指定查找类型
+php artisan debug:reproduce-error 68973982 --type=request_unid
+
+# 不清空日志文件
+php artisan debug:reproduce-error 68973982 --no-clear-logs
+
+# 强制使用post数据
+php artisan debug:reproduce-error 68973982 --data-source=post
+
+# 强制使用protobuf_json数据
+php artisan debug:reproduce-error 68973982 --data-source=protobuf_json
+```
+
+## 测试结果
+
+### 测试用例1:使用 post 数据源(protobuf 格式)
+
+```bash
+php artisan debug:reproduce-error 68981506 --no-clear-logs
+```
+
+输出:
+- ✅ 正确检测到 Content-Type: application/x-protobuf
+- ✅ 使用数据源: post
+- ✅ 检测到数据类型: protobuf
+- ✅ 显示二进制数据长度: 28 字节
+- ✅ 成功发起请求
+
+### 测试用例2:使用 protobuf_json 数据源
+
+```bash
+php artisan debug:reproduce-error 68981506 --data-source=protobuf_json
+```
+
+输出:
+- ✅ 使用数据源: protobuf_json
+- ✅ 检测到数据类型: json
+- ✅ 显示 JSON 格式的请求数据预览
+- ✅ 成功发起请求并得到响应
+
+### 测试用例3:使用 request_unid 查找
+
+```bash
+php artisan debug:reproduce-error request_1749626545371 --data-source=post
+```
+
+输出:
+- ✅ 成功通过 request_unid 找到记录
+- ✅ 正确使用 post 数据源
+- ✅ 成功发起请求
+
+## 技术实现
+
+### 核心方法
+
+1. **prepareRequestData()**: 根据数据源策略准备请求数据
+2. **preparePostData()**: 处理 post 字段的 base64 解码和类型判断
+3. **prepareProtobufJsonData()**: 处理 protobuf_json 数据
+4. **extractContentType()**: 从 headers 中提取 Content-Type
+5. **makeRequest()**: 根据数据类型发起不同格式的请求
+
+### 数据流程
+
+1. 查找请求记录
+2. 解析 headers 获取 Content-Type 和 token
+3. 根据数据源策略准备请求数据
+4. 根据数据类型设置请求头
+5. 发起请求并返回结果
+
+## 改进点
+
+- 默认优先使用 post 字段的原始请求数据
+- 自动检测数据类型,无需手动指定
+- 支持多种数据源选择,灵活性更高
+- 改进数据预览,便于调试
+- 更详细的日志输出和错误处理
+
+## 提交信息
+
+```
+增强ReproduceErrorCommand:支持post字段数据和Content-Type自动检测
+
+- 新增--data-source选项,支持post、protobuf_json、auto三种数据源
+- 默认优先使用post字段的原始请求数据(base64解码)
+- 根据headers中的Content-Type自动检测数据类型(json/protobuf)
+- 支持protobuf二进制和JSON两种请求格式的重放
+- 改进请求数据预览,二进制数据显示长度和base64预览
+- 更新命令帮助文档和使用示例
+```
+
+## 完成时间
+
+2025年06月11日 15:24

+ 8 - 5
AiWork/WORK.md

@@ -30,6 +30,13 @@ shop_items 的 $max_buy 确认被替代后移除,使用mcp执行sql
 
 ## 已完成任务(保留最新的10条,多余的删除)
 
+**2025-06-11 15:24** - ReproduceErrorCommand增强:支持post字段数据和Content-Type自动检测
+- 需求:ReproduceErrorCommand增强,默认使用post字段的数据,根据headers提取数据类型进行请求重放
+- 实现:新增--data-source选项支持post/protobuf_json/auto三种数据源,根据Content-Type自动检测数据类型,支持protobuf二进制和JSON两种请求格式
+- 功能:优先使用post字段原始数据,自动解析headers中的Content-Type,改进数据预览显示,支持多种查找方式
+- 测试:验证protobuf和JSON格式请求重放,通过ID和request_unid查找,数据源切换功能正常
+- 文件:./AiWork/2025年06月/11日15时24分-ReproduceErrorCommand增强支持post字段数据和Content-Type自动检测.md
+
 **2025-06-11 15:01** - Fund模块小数处理统一化:移除data1字段,精度配置移至枚举,统一处理机制
 - 需求:移除币种数据库表的'data1'字段,将币种的精度移动到硬编码的枚举中
 - 实现:完善FUND_CURRENCY_TYPE枚举添加精度配置方法,移除fund_currency表data1字段,更新服务层使用枚举精度
@@ -128,11 +135,7 @@ shop_items 的 $max_buy 确认被替代后移除,使用mcp执行sql
 - 测试:所有功能测试通过,奖励系统集成正常,数据一致性验证通过,错误处理机制正常
 - 文件:./AiWork/202506/091805-皮肤系统完整实现.md
 
-**2025-06-09 16:52** - 修复合成验证逻辑:避免服务层处理时出错,在Handler中添加完整验证
-- 问题:验证通过后服务层处理时还会出错,验证逻辑不完善,CraftHandler没有使用ItemCraftValidation进行完整验证
-- 修复:在Handler中添加完整验证逻辑,修复多个错误处理问题(Res对象属性使用错误、异常捕获类型错误)
-- 结果:验证阶段正确捕获材料不足问题,返回具体错误信息,避免在服务层事务中出错,提升用户体验
-- 文件:./AiWork/2025年06月/09日1652-修复合成验证逻辑避免服务层处理时出错.md
+