ITPub博客

首页 > 移动开发 > IOS > 抓包鹰抓包请求构造与重放,改参数重发、手拼请求、动态值处理签名

抓包鹰抓包请求构造与重放,改参数重发、手拼请求、动态值处理签名

原创 IOS 作者:iOS调试笔记 时间:2026-07-29 11:36:26 0 删除 编辑

请求构造与重放

本篇教你把抓到的请求 改一改再发,或者从零 手拼一条请求发出去:任意一条抓到的请求都能一键重发、改完再发;也能在请求构造器里自己拼一个新请求。带签名 / 时间戳的私有接口,用 动态值现算就能真正重放;常用请求和多套环境,用 集合 / 环境管起来。抓包和调接口在同一处完成,不用来回切工具。

一、什么时候用

适合你满足下面任一条:

  • 抓到一条请求,想 改几个参数再发一次,看返回怎么变。
  • 想从零 手拼一条请求去调某个接口,方法、URL、请求头、body 自己填。
  • 接口带 签名 / 时间戳 / 随机数,直接照抄旧值发不通——需要每次发送前 现算。
  • 要在 开发 / 测试 / 线上几套地址间来回切,或把常用请求存起来反复用。

如果你要的是 半路拦下来手动改、或按规则 自动改写流量,那是另一件事,见 规则改写与断点拦截。

二、前置条件

  • 已安装并启动 TraceEagle。
  • 想「改抓到的请求再发」:先抓到目标请求(任一种抓法都行,见 快速开始)。
  • 想「从零手拼」:知道要调的接口地址、方法,以及需要的请求头 / body。
  • 接口带签名的,准备好 密钥 / 算法(如 HMAC 用的 key、拼签名的字段顺序)。

三、分步操作

A. 把抓到的请求一键重发 / 改完再发

  1. 在流量列表里 右键某条请求,或在详情面板点 「编辑并重发」。
  2. 这条请求会 原样载入请求构造器:地址按抓包时的协议 / 主机 / 端口自动还原,请求体和类型按内容自动认好,无关的连接头会自动剔除——打开就是能发的状态。
  3. 什么都不改,直接点 发送,就是 一键重发;想调参数,就改 URL、参数表、请求头或 body,再点发送。
  4. 每次发送都会记进独立的 Composer 会话页签,保留完整历史,像抓到的请求一样能查看、能再改、能对比。

B. 从零手拼一条请求

在请求构造器里逐块填好,即可发送:

  1. 请求行:选方法(GET / POST / PUT / DELETE / PATCH / HEAD / OPTIONS),填 URL。
  2. 参数表:查询参数一行一个单独管理,和 URL 分开维护,发送时才拼到一起——这样参数里写的动态占位符不会被提前编码破坏。
  3. 请求头表:一行一个,任意增删改。
  4. 鉴权助手:可选 None / Bearer Token / Basic(填用户名 + 密码,自动 base64);只有你没手写 Authorization 头时才生效。
  5. 请求体:可选 none / JSON / 表单(form-urlencoded)/ 原始文本;选 JSON 或表单会自动补上对应的 Content-Type。
  6. 填好点 发送。

不想一格格填?可以直接 粘贴一条 cURL 命令导入成可编辑请求(支持 -X / -H / -d / --data-* / -u / -b / -A / -e 等常见参数,带请求体会自动判成 POST);也可以 导入外部接口集合文件。

请求构造器

C. 用动态值搞定签名 / 时间戳

带签名的接口,旧的时间戳和签名照抄发不过去。在 任意字段里写 ${...} 动态值,发送前会 现算成真实值再发出去:

你要什么 这样写
随机 UUID ${uuid} / ${randomUUID}
秒级时间戳 ${timestamp}
毫秒级时间戳 ${timestampMs} / ${now}
16 位随机十六进制 ${random}
区间随机整数 ${randomInt:min,max}
Base64 编 / 解码 ${base64:} / ${base64url:} / ${base64decode:}
哈希 ${md5:} / ${sha1:} / ${sha256:}
HMAC 签名 ${hmacSha256:key,msg} / ${hmacSha256Base64:key,msg} / ${hmacSha1:key,msg}
URL 编码 / 大小写 ${urlEncode:} / ${upper:} / ${lower:}
  • 可以嵌套:比如 ${hmacSha256:${secret},${body}},先取变量、再拿去算签名。
  • 常见套路:请求头里放 X-Timestamp: ${timestamp},签名头放 X-Sign: ${hmacSha256:${secret},${timestamp}},每次发送时间戳和签名都跟着自动更新。
  • 算不出来的原样留着,方便你一眼看出是哪个变量没求上值,而不是稀里糊涂发出个空值。

D. 用集合 / 环境管起来

  • 环境变量:把 ${name} 抽成环境变量,配好 开发 / 测试 / 线上几套,一键切换整套地址和参数;变量之间还能互相引用、链式展开。
  • 集合:把常用请求归进命名分组,随时把当前请求存进去,随时载回来复用。
  • 集合 + 环境会 自动保存成一份纯文本文件,可以 diff、可以 review,方便团队共享和追溯。

想让重放更贴近真实链路,可以在构造器的 设置里让发送带上和抓包会话一致的网络特征:走 上游代理(http / socks5)、把请求特征 还原为标准客户端、指定 自定义 DNS 解析。

四、验证:确认真的发出去、也收到了

  1. 点发送后,构造器里会 内联显示状态码、协议、耗时——收到响应就说明这一发通了。
  2. 这一发会作为一条 Flow 记进 Composer 会话,点开能看到完整的请求和响应,和抓到的请求一样可再看、可再改。
  3. 带签名的接口:发送前动态值已在本地算成真实值,你能 看到最终真正发出去的内容;返回不再是「签名错误 / 时间戳过期」,而是正常业务响应,就说明重放成功了。
  4. 想确认「这次和上次差在哪」:把重放的请求和历史抓到的真实请求并排 逐行对比,见 请求对比。

五、发不出去 / 返回不对?逐条排查

现象 多半是 怎么办
返回「签名错误 / 时间戳过期」 签名字段写的是抓包时的旧值 改成动态值现算,如 ${timestamp}、 ${hmacSha256:key,msg}
发出去后某个 ${...} 原样出现在请求里 这个变量没求到值(拼错、或环境里没定义) 检查动态值拼写;用到环境变量就确认当前环境里定义了它
参数里的 ${...} 发出去变成了乱码 占位符被提前编码了 查询参数写进 参数表逐行管理,别直接塞进 URL
请求体发出去没带 Content-Type 请求体选成了 none 或原始文本 选 JSON 或表单,会自动补对应 Content-Type;或在请求头表里手写一个
鉴权没生效 已手写了 Authorization 头 鉴权助手只在你没手写该头时生效;二选一,别重复
切了环境但地址没变 请求里写的是写死的地址,不是变量 把会变的部分抽成 ${name} 环境变量,再切环境
重放能通但结果和真实链路对不上 网络特征和抓包时不一致 在设置里对齐上游代理 / 请求特征 / 自定义 DNS

六、下一步

  • 抓到的请求怎么读、怎么切视图、怎么解码:见 数据查看与解码。
  • 想知道「这次重放和上次到底差在哪」:见 请求对比。
  • 想半路拦下来手动改、或按规则自动改写:见 规则改写与断点拦截。
  • 把请求导出成 cURL / Python / Go 等代码贴进项目:见 生成代码与导出接口文档。
  • 一条请求要反复、成批地压着发:见 会话重放与压力测试。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046796/viewspace-3177041/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-06-17

  • 博文量
    168
  • 访问量
    178364