请求构造与重放本篇教你把抓到的请求改一改再发或者从零手拼一条请求发出去任意一条抓到的请求都能一键重发、改完再发也能在请求构造器里自己拼一个新请求。带签名 / 时间戳的私有接口用动态值现算就能真正重放常用请求和多套环境用集合 / 环境管起来。抓包和调接口在同一处完成不用来回切工具。一、什么时候用适合你满足下面任一条抓到一条请求想改几个参数再发一次看返回怎么变。想从零手拼一条请求去调某个接口方法、URL、请求头、body 自己填。接口带签名 / 时间戳 / 随机数直接照抄旧值发不通——需要每次发送前现算。要在开发 / 测试 / 线上几套地址间来回切或把常用请求存起来反复用。如果你要的是半路拦下来手动改、或按规则自动改写流量那是另一件事见 规则改写与断点拦截。二、前置条件已安装并启动 TraceEagle。想「改抓到的请求再发」先抓到目标请求任一种抓法都行见 快速开始。想「从零手拼」知道要调的接口地址、方法以及需要的请求头 / body。接口带签名的准备好密钥 / 算法如 HMAC 用的 key、拼签名的字段顺序。三、分步操作A. 把抓到的请求一键重发 / 改完再发在流量列表里右键某条请求或在详情面板点「编辑并重发」。这条请求会原样载入请求构造器地址按抓包时的协议 / 主机 / 端口自动还原请求体和类型按内容自动认好无关的连接头会自动剔除——打开就是能发的状态。什么都不改直接点发送就是一键重发想调参数就改 URL、参数表、请求头或 body再点发送。每次发送都会记进独立的Composer 会话页签保留完整历史像抓到的请求一样能查看、能再改、能对比。B. 从零手拼一条请求在请求构造器里逐块填好即可发送请求行选方法GET / POST / PUT / DELETE / PATCH / HEAD / OPTIONS填 URL。参数表查询参数一行一个单独管理和 URL 分开维护发送时才拼到一起——这样参数里写的动态占位符不会被提前编码破坏。请求头表一行一个任意增删改。鉴权助手可选 None / Bearer Token / Basic填用户名 密码自动 base64只有你没手写Authorization头时才生效。请求体可选 none / JSON / 表单form-urlencoded/ 原始文本选 JSON 或表单会自动补上对应的Content-Type。填好点发送。不想一格格填可以直接粘贴一条 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解析。四、验证确认真的发出去、也收到了点发送后构造器里会内联显示状态码、协议、耗时——收到响应就说明这一发通了。这一发会作为一条 Flow 记进 Composer 会话点开能看到完整的请求和响应和抓到的请求一样可再看、可再改。带签名的接口发送前动态值已在本地算成真实值你能看到最终真正发出去的内容返回不再是「签名错误 / 时间戳过期」而是正常业务响应就说明重放成功了。想确认「这次和上次差在哪」把重放的请求和历史抓到的真实请求并排逐行对比见 请求对比。五、发不出去 / 返回不对逐条排查现象多半是怎么办返回「签名错误 / 时间戳过期」签名字段写的是抓包时的旧值改成动态值现算如${timestamp}、${hmacSha256:key,msg}发出去后某个${...}原样出现在请求里这个变量没求到值拼错、或环境里没定义检查动态值拼写用到环境变量就确认当前环境里定义了它参数里的${...}发出去变成了乱码占位符被提前编码了查询参数写进参数表逐行管理别直接塞进 URL请求体发出去没带Content-Type请求体选成了 none 或原始文本选 JSON 或表单会自动补对应Content-Type或在请求头表里手写一个鉴权没生效已手写了Authorization头鉴权助手只在你没手写该头时生效二选一别重复切了环境但地址没变请求里写的是写死的地址不是变量把会变的部分抽成${name}环境变量再切环境重放能通但结果和真实链路对不上网络特征和抓包时不一致在设置里对齐上游代理 / 请求特征 / 自定义 DNS六、下一步抓到的请求怎么读、怎么切视图、怎么解码见 数据查看与解码。想知道「这次重放和上次到底差在哪」见 请求对比。想半路拦下来手动改、或按规则自动改写见 规则改写与断点拦截。把请求导出成 cURL / Python / Go 等代码贴进项目见 生成代码与导出接口文档。一条请求要反复、成批地压着发见 会话重放与压力测试。
抓包鹰抓包请求构造与重放,改参数重发、手拼请求、动态值处理签名
请求构造与重放本篇教你把抓到的请求改一改再发或者从零手拼一条请求发出去任意一条抓到的请求都能一键重发、改完再发也能在请求构造器里自己拼一个新请求。带签名 / 时间戳的私有接口用动态值现算就能真正重放常用请求和多套环境用集合 / 环境管起来。抓包和调接口在同一处完成不用来回切工具。一、什么时候用适合你满足下面任一条抓到一条请求想改几个参数再发一次看返回怎么变。想从零手拼一条请求去调某个接口方法、URL、请求头、body 自己填。接口带签名 / 时间戳 / 随机数直接照抄旧值发不通——需要每次发送前现算。要在开发 / 测试 / 线上几套地址间来回切或把常用请求存起来反复用。如果你要的是半路拦下来手动改、或按规则自动改写流量那是另一件事见 规则改写与断点拦截。二、前置条件已安装并启动 TraceEagle。想「改抓到的请求再发」先抓到目标请求任一种抓法都行见 快速开始。想「从零手拼」知道要调的接口地址、方法以及需要的请求头 / body。接口带签名的准备好密钥 / 算法如 HMAC 用的 key、拼签名的字段顺序。三、分步操作A. 把抓到的请求一键重发 / 改完再发在流量列表里右键某条请求或在详情面板点「编辑并重发」。这条请求会原样载入请求构造器地址按抓包时的协议 / 主机 / 端口自动还原请求体和类型按内容自动认好无关的连接头会自动剔除——打开就是能发的状态。什么都不改直接点发送就是一键重发想调参数就改 URL、参数表、请求头或 body再点发送。每次发送都会记进独立的Composer 会话页签保留完整历史像抓到的请求一样能查看、能再改、能对比。B. 从零手拼一条请求在请求构造器里逐块填好即可发送请求行选方法GET / POST / PUT / DELETE / PATCH / HEAD / OPTIONS填 URL。参数表查询参数一行一个单独管理和 URL 分开维护发送时才拼到一起——这样参数里写的动态占位符不会被提前编码破坏。请求头表一行一个任意增删改。鉴权助手可选 None / Bearer Token / Basic填用户名 密码自动 base64只有你没手写Authorization头时才生效。请求体可选 none / JSON / 表单form-urlencoded/ 原始文本选 JSON 或表单会自动补上对应的Content-Type。填好点发送。不想一格格填可以直接粘贴一条 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解析。四、验证确认真的发出去、也收到了点发送后构造器里会内联显示状态码、协议、耗时——收到响应就说明这一发通了。这一发会作为一条 Flow 记进 Composer 会话点开能看到完整的请求和响应和抓到的请求一样可再看、可再改。带签名的接口发送前动态值已在本地算成真实值你能看到最终真正发出去的内容返回不再是「签名错误 / 时间戳过期」而是正常业务响应就说明重放成功了。想确认「这次和上次差在哪」把重放的请求和历史抓到的真实请求并排逐行对比见 请求对比。五、发不出去 / 返回不对逐条排查现象多半是怎么办返回「签名错误 / 时间戳过期」签名字段写的是抓包时的旧值改成动态值现算如${timestamp}、${hmacSha256:key,msg}发出去后某个${...}原样出现在请求里这个变量没求到值拼错、或环境里没定义检查动态值拼写用到环境变量就确认当前环境里定义了它参数里的${...}发出去变成了乱码占位符被提前编码了查询参数写进参数表逐行管理别直接塞进 URL请求体发出去没带Content-Type请求体选成了 none 或原始文本选 JSON 或表单会自动补对应Content-Type或在请求头表里手写一个鉴权没生效已手写了Authorization头鉴权助手只在你没手写该头时生效二选一别重复切了环境但地址没变请求里写的是写死的地址不是变量把会变的部分抽成${name}环境变量再切环境重放能通但结果和真实链路对不上网络特征和抓包时不一致在设置里对齐上游代理 / 请求特征 / 自定义 DNS六、下一步抓到的请求怎么读、怎么切视图、怎么解码见 数据查看与解码。想知道「这次重放和上次到底差在哪」见 请求对比。想半路拦下来手动改、或按规则自动改写见 规则改写与断点拦截。把请求导出成 cURL / Python / Go 等代码贴进项目见 生成代码与导出接口文档。一条请求要反复、成批地压着发见 会话重放与压力测试。