共计 1447 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
在 API 开发和测试过程中,经常需要动态修改请求头(Header)参数,比如:
- 切换不同环境的鉴权 Token(如测试环境与生产环境)
- 模拟不同设备或版本的请求(通过修改 User-Agent 或 API 版本头)
- 调试签名校验逻辑(需要修改 Authorization 或自定义签名头)
直接修改代码或配置文件虽然可行,但效率低下且容易出错。Charles 作为一款强大的抓包工具,提供了动态修改 Header 的能力,极大提升了调试效率。
工具对比
| 工具 | Header 修改优势 | 局限性 |
|---|---|---|
| Charles | 无需代码、可视化操作、支持条件断点 | 无法保存修改模板 |
| Postman | 可保存请求模板、环境变量管理完善 | 只能修改发送前的 Header |
| BurpSuite | 功能最强大、支持自动化 | 学习成本高、适合安全测试 |
核心操作
1. 启用 Breakpoints 功能
- 打开 Charles,确保已开始抓包(Proxy > Recording Settings)
- 菜单栏选择 Proxy > Breakpoint Settings
- 点击 Enable Breakpoints 开启全局断点
- 在下方列表中添加需要拦截的 URL(支持通配符
*)

2. 修改 Header 参数
当请求命中断点时:
- 在弹出的 Edit Request 窗口中选择 Headers 标签
- 修改或添加 Header 键值对(例如添加
X-API-Version: 2.0) - 勾选 Conditional Breakpoint 可以设置触发条件
- 点击 Execute 继续请求
代码级示例
原始请求报文
GET /api/user HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer old_token
修改后报文
GET /api/user HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer new_token
X-Debug-Mode: true # ← 新增的 Header
避坑指南
签名校验问题
当修改以下 Header 时需特别注意:
– Authorization
– X-Signature
– Date
解决方案 :
1. 先通过 Charles 获取原始签名
2. 使用相同算法重新生成签名
3. 同步更新签名 Header
常见错误
- 413 错误 :检查是否意外添加了大体积 Header
- 400 错误 :确认 Header 名称是否符合 API 规范(大小写敏感)
高阶技巧
Map Local 批量修改
- 准备包含目标 Header 的本地 JSON 文件
- 右键请求 > Map Local > 选择文件
- 勾选 Preserve headers from original request
External Proxy 自动化
通过编写脚本(如 Python)实现:
from mitmproxy import http
def request(flow: http.HTTPFlow):
flow.request.headers["X-Custom-Header"] = "auto_injected"
修改效果验证 checklist
- [] 修改后的 Header 出现在实际请求中
- [] 接口返回预期状态码(如 200)
- [] 签名校验通过(如有)
- [] 响应内容符合修改后的预期
- [] 无性能下降或额外延迟
结语
通过 Charles 修改 Header 参数,开发者可以快速验证不同场景下的接口行为。建议结合 Breakpoints 的条件过滤和 Map Local 功能,构建可复用的测试方案。遇到签名问题时,推荐先使用 Charles 观察正常请求的 Header 组合,再逐步调整修改策略。
正文完
发表至: 未分类
近两天内
