首页 > 移动开发 > IOS > 抓到的请求改参数重发,请求重放与签名接口实操
前阵子调一个带签名的接口,抓下来一条能通的请求,想改个参数重发试试服务端校验——原样贴到别的工具里发出去,返回"签名错误"。请求头里的 X-Timestamp 和 X-Sign 写的是抓包那一刻的值,早过期了,照抄的请求当然通不过。
“抓到的请求改参数重发"这类需求,抓包工具里的请求构造器就是干这个的。拿 TraceEagle 举例,最省事的入口是粘一条 cURL:
1curl -X POST 'https://api.example.com/v1/order' \2 -H 'Content-Type: application/json' \3 -H 'X-Timestamp: 1718000000' \4 -H 'X-Sign: 8f3a...' \5 -d '{"sku":"A1","qty":2}'
导入后自动拆成可编辑的表单:方法、URL、请求头、请求体各归各位,不用手抄。下面把请求重放的几条用法拆开讲。
流量列表里右键某条请求(或详情面板点「编辑并重发」),它原样载入构造器:地址按抓包时的协议、主机、端口自动还原,请求体和类型按内容自动识别,无关的连接头自动剔除。什么都不改直接发,就是一键重发;改 URL、参数、请求头或 body 再发,就是验证服务端对不同入参的反应。每次发送都记进独立的 Composer 会话页签,保留完整历史,和抓到的请求一样可以再查看、再修改。
两种入口怎么选?手里已经有一条调得通的真实请求(想改参数复现、或换环境重试),走"编辑并重发”,字段全带好了;手上只有接口文档、要从零试一个新接口,走手拼。日常排查里前者用得更多——抓下来改一改,比从头填一遍快得多。
Charles、Fiddler 也有类似的重发入口(Repeat、Compose),思路一致:不用手抄请求,从抓到的流量里带出来。
手拼的请求就五块:方法加 URL;查询参数按表格一行一个,和 URL 分开维护——发送时才拼接,参数里写的动态占位符不会被提前编码破坏;请求头表格逐行增删改;鉴权助手(Bearer、Basic 自动 base64,只在你没手写 Authorization 头时生效);请求体(JSON、表单、原始文本,选前两种自动补 Content-Type)。填完点发送。
这是
TraceEagle 构造器里最值钱的地方。任意字段里都能写
${...} 动态值,发送前在本地求值——签名接口常用的那几类都覆盖了:
| 写法 | 值 |
|---|---|
${timestamp} /
${timestampMs} |
秒级 / 毫秒级时间戳 |
${hmacSha256:key,msg} |
HMAC 签名 |
${md5:...} /
${sha256:...} |
哈希 |
${randomUUID} /
${random} |
随机值 |
${base64:...} /
${urlEncode:...} |
编码转换 |
签名接口的典型配法:请求头放
X-Timestamp: ${timestamp},签名头放
X-Sign: ${hmacSha256:${secret},${timestamp}}——动态值可以嵌套,先取环境变量里的密钥,再拿去算签名。每次发送时间戳和签名跟着自动更新,返回的不再是"签名过期",而是正常业务响应。还有个细节:算不出来的动态值会原样保留在发送内容里,一眼能看出哪个变量拼错了,不会稀里糊涂发出个空值。

地址里会变的部分抽成
${name} 环境变量,开发、测试、线上几套配好,一键切换整套地址和参数,变量之间还能链式引用。常用请求存进集合分组,随时载回复用。集合加环境自动保存成一份纯文本文件——可以 diff、可以 review,团队共享和版本追溯都方便。
一个顺手的用法:要复现昨天线上失败的那条请求——把域名抽成
${baseUrl},切到测试环境,请求参数一个不动,两次返回的差异一目了然。这类"同一条请求多环境复现"的活,比手工改地址逐条核对省事得多。
想让重放结果更可信,构造器设置里还能对齐网络特征:走上游代理(http / socks5)、把请求特征还原为标准客户端、指定自定义 DNS 解析。和抓包时的链路一致,排查结论才站得住。
${timestamp}、
${hmacSha256:...} 现算。${...} 原样出现在请求里? 变量没求到值——拼错了或环境里没定义,检查拼写和当前环境。发送结果怎么确认?构造器里内联显示状态码、协议和耗时,收到响应就说明这一发通了;这一发会作为一条 Flow 记进 Composer 会话,点开能看到完整请求和响应,存疑的可以和历史抓到的真实流量并排对比。
和规则改写那类"流量经过时自动改"的能力不同,构造器是主动造请求:你写什么,发什么。验证完的请求还能一键导出成 cURL、Python、Go 代码贴进项目,或与历史请求并排对比,定位签名和参数的差异。
重放的用法就一句话:把真实请求载进来,让会变的(时间戳、签名、环境)自己变,让不该变的保持原样——改参数、验签名、跑回归,一个构造器接住。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70051042/viewspace-3182153/ ,如需转载,请注明出处,否则将追究法律责任。