推送拦截数据

接口

POST /shater/raw-data?sessionId=<sessionId>

说明

App 端拦截到请求后,通过此接口将数据推送到服务端。适用于"直接扫码"模式。

请求参数

参数类型必填说明
sessionIdstringSession 唯一标识(15 位字符)

请求体

application/x-www-form-urlencodedapplication/json

字段类型必填说明
apistring接口路径(如 /api/user/info
methodstring请求方法(GET/POST/PUT/DELETE)
requestHeaderstring请求头(原始字符串)
responseHeaderstring响应头(原始字符串)
requeststring请求体(JSON 字符串或文本)
responsestring响应体(JSON 字符串或文本)
timeConsumingnumber耗时(毫秒)
requestIdstring请求唯一标识(用于双阶段推送)

双阶段推送

如果 requestId 已存在,会更新已有记录,而非新增记录。适用场景:

  1. Pending 阶段:请求发起时立即推送(timeConsuming=0
  2. Complete 阶段:请求完成后再次推送(timeConsuming>0),自动更新原记录

响应示例

{
  "code": "0",
  "message": "推送成功",
  "data": "1234567890-abc123"
}

字段说明

字段类型说明
codestring状态码,"0" 表示成功
messagestring提示信息
datastring新记录的唯一 ID

示例

cURL

curl -X POST 'https://shater.online/shater/raw-data?sessionId=7a58592c72f04fe' \
  -H 'Content-Type: application/json' \
  -d '{
    "api": "/api/user/info",
    "method": "POST",
    "request": "{\"userId\": 123}",
    "response": "{\"code\": 0, \"data\": {...}}",
    "timeConsuming": 120
  }'

双阶段推送示例

// 1. Pending 阶段:请求发起时立即推送
await fetch(`${REPORT_URL}?sessionId=${SESSION_ID}`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    api: '/api/user/info',
    method: 'POST',
    requestId: 'req-uuid-001',  // 生成唯一 requestId
    timeConsuming: 0,           // 标记为 Pending
    response: '',
  }),
});

// 2. Complete 阶段:请求完成后更新
const timeConsuming = Date.now() - startTime;
await fetch(`${REPORT_URL}?sessionId=${SESSION_ID}`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    api: '/api/user/info',
    method: 'POST',
    requestId: 'req-uuid-001',  // 同一个 requestId
    timeConsuming,               // 实际耗时
    response: await response.text(),
  }),
});

相关文档