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

1次阅读
没有评论

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

image.webp

技术背景

在接口开发和调试过程中,经常需要修改 HTTP 请求的 Header 参数。常见场景包括:

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

  • 测试不同鉴权 Token 的有效性
  • 模拟多环境切换(如切换测试 / 生产环境标识)
  • 调试特定客户端版本的兼容性
  • 验证服务端对非常规 Header 的处理逻辑

工具对比

以下是主流调试工具在 Header 修改方面的对比:

  • Charles:
  • 优势:支持断点实时修改、Map Local 批量替换、脚本自动化
  • 劣势:商业软件(免费版有功能限制)

  • Postman:

  • 优势:可视化界面友好,适合手工测试
  • 劣势:无法拦截和修改已有应用的请求

  • Fiddler:

  • 优势:免费开源,插件生态丰富
  • 劣势:Windows 平台独占,脚本学习成本高

核心操作

SSL 证书配置

  1. 安装 Charles 根证书:
  2. 菜单选择 Help > SSL Proxying > Install Charles Root Certificate

  3. 信任证书(以 macOS 为例):

  4. 钥匙串访问中找到 ”Charles Proxy” 证书
  5. 右键选择 ” 显示简介 ” > 信任 > 始终信任

  6. 启用 SSL 代理:

  7. 菜单选择 Proxy > SSL Proxying Settings
  8. 勾选 ”Enable SSL Proxying”
  9. 添加需要抓包的域名(或使用 * 匹配所有)

使用 Breakpoints 修改 Header

  1. 开启断点功能:
  2. 菜单选择 Proxy > Breakpoint Settings
  3. 添加需要拦截的请求 URL(支持通配符)

  4. 触发请求后进入编辑界面:

  5. 在 Request 选项卡中找到 Headers 部分
  6. 修改或添加需要的 Header 键值对
  7. 点击 ”Execute” 继续请求

Map Local 批量替换

创建 headers-config.json 配置文件:

{
  "rules": [
    {
      "match": "^https://api.example.com",
      "headers": {
        "X-Env": "test",
        "Authorization": "Bearer test_token"
      }
    }
  ]
}

配置步骤:
1. 菜单选择 Tools > Map Local
2. 点击 ”Add” 添加新规则
3. 选择配置文件并设置匹配条件

避坑指南

  1. HTTPS 抓包空白问题
  2. 检查设备是否安装了 Charles 根证书
  3. 确认 SSL Proxying 中包含了目标域名

  4. 修改后 Header 未生效

  5. 确保没有其他规则覆盖当前修改
  6. 检查 Breakpoints 是否被意外禁用

  7. Map Local 文件加载失败

  8. 验证 JSON 格式是否正确
  9. 检查文件路径是否包含中文或特殊字符

高级技巧:动态 Header 注入

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

function beforeRequest(request) {if (request.url.indexOf("/login") > -1) {request.headers.add("X-Debug-Mode", "true");
  }
}

function beforeResponse(response) {if (response.url.indexOf("/auth") > -1) {var token = JSON.parse(response.body).token;
    session.setVariable("auth_token", token);
  }
}

配置方法:
1. 菜单选择 Tools > Scripting
2. 粘贴上述脚本并保存
3. 在需要 Token 的请求 Header 中添加:
{{auth_token}}

思考题

当需要修改的 Header 参数依赖前序请求响应时,应该如何设计调试流程?

实际开发中,我通常采用组合方案:先用 Breakpoints 手动获取初始 Token,再通过 Scripting 实现自动化传递。对于复杂场景,可以配合 Map Local 和环境变量实现多步骤的 Header 管理。

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