|
|
@@ -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
|