Charles修改Header参数实战指南:从基础配置到高级调试

1次阅读
没有评论

共计 1465 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

技术背景

在实际开发中,修改 HTTP 请求的 Header 参数是接口调试的常见需求。例如:

  • 测试不同权限的接口访问,需要动态切换 Authorization 头
  • 多环境切换时修改 Host 或 X -Env 标记
  • 模拟移动设备请求时修改 User-Agent
  • 测试签名校验逻辑时需要实时调整签名参数

这些场景如果通过修改代码重新部署的方式验证,效率极低。而 Charles 作为专业的 HTTP 抓包工具,可以实时拦截和修改请求头信息。

工具对比

  • Charles
  • 优势:完整的请求拦截和修改能力,支持断点和脚本注入
  • 劣势:需要配置 SSL 证书,学习成本略高

  • Postman

  • 优势:适合手动构造请求,界面友好
  • 劣势:无法拦截真实客户端发出的请求

  • Fiddler

  • 优势:Windows 平台性能较好
  • 劣势:跨平台支持较弱,脚本功能不如 Charles 强大

核心操作

1. 配置 SSL 证书

  1. 安装 Charles 后,进入菜单栏选择 Help > SSL Proxying > Install Charles Root Certificate
  2. 在钥匙串访问中找到 Charles 证书,设置为始终信任
  3. 在 Charles 中启用 SSL 代理:Proxy > SSL Proxying Settings,添加需要抓包的域名

Charles 修改 Header 参数实战指南:从基础配置到高级调试

2. 使用 Breakpoints 修改 Header

  1. 在 Charles 中右键目标请求,选择 Breakpoints
  2. 重新发起请求,当请求被拦截时,切换到 Edit Request 标签
  3. 在 Headers 部分添加或修改需要的参数
  4. 点击 Execute 继续请求

3. Map Local 批量替换

创建配置文件 header-map.json:

{
  "//comment": "将所有请求的 X -Debug 头改为 1",
  "rules": [
    {
      "match": {"host": "api.example.com"},
      "headers": {"X-Debug": "1"}
    }
  ]
}

在 Charles 的 Tools > Map Local 中导入该配置。

避坑指南

  1. 证书信任失败
  2. 现象:iOS 设备提示不受信证书
  3. 解决:在设备 Safari 中访问 chls.pro/ssl 安装证书,并在设置中手动信任

  4. HTTPS 抓包空白

  5. 现象:只看到 CONNECT 请求没有内容
  6. 解决:确保正确配置了 SSL 代理设置,且客户端没有禁用代理

  7. 修改后接口报错

  8. 现象:修改 Header 后服务端返回 400/403
  9. 解决:检查是否有签名校验逻辑,需要同步更新签名参数

高级技巧:动态 Header 注入

使用 Charles Script 实现根据响应动态修改后续请求 Header:

function beforeRequest(request) {if(request.host.indexOf("api.example.com") >= 0) {
    // 从 session 中获取 token
    var token = session.get("authToken");
    if(token) {request.headers.add("Authorization", "Bearer" + token);
    }
  }
}

function afterResponse(response) {
  // 登录接口响应中提取 token
  if(response.url.indexOf("/login") >= 0) {var token = JSON.parse(response.body).token;
    session.set("authToken", token);
  }
}

思考题

当需要修改的 Header 参数依赖前序请求响应时(如先获取 token 再用于后续请求),应该如何设计调试流程?建议尝试结合 Charles Script 的 session 功能实现自动化流程。

正文完
 0
评论(没有评论)