Charles 使用手册速览

Charles 使用手册速览

一、工具基础介绍

1.1 核心功能定位

Charles 是跨平台 HTTP 代理调试工具,提供以下核心能力:

  • 全流量捕获:支持 HTTP/HTTPS/WebSocket/TCP 等协议
  • 请求篡改:实时修改请求头、参数、Body 内容
  • 响应模拟:构造自定义响应或映射本地文件
  • 弱网模拟:配置延迟、带宽限制、丢包率
  • 自动化测试:通过 Charles Script 编写测试逻辑
  • 移动端调试:支持 iOS/Android 设备代理配置

1.2 工作原理架构

客户端
Charles代理
Web服务器
过滤器
请求拦截
响应修改
会话列表
统计面板

二、核心功能详解

2.1 实时捕获配置

代理设置

  • PC 端
    # Chrome 代理配置
    chrome://settings/search?q=proxy
    设置 -> 高级 -> 系统 -> 打开代理设置
    
  • 移动端
    • iOS:设置 -> WLAN -> 配置代理 -> 手动
    • Android:设置 -> WLAN -> 修改网络 -> 高级选项

捕获过滤器

# 语法:Protocol Host URL StatusCode
HTTP api.example.com /api/ 404

# 高级示例
(HTTP | HTTPS) && (Host: api.example.com || Host: admin.example.com)

2.2 请求篡改技术

手动修改

  1. 在会话列表选择请求
  2. 点击 Edit 标签页
  3. 修改 Request Headers/Query/Body
  4. 点击 Execute 发送

自动修改规则

// Charles Script 示例:自动添加认证头
if (request.url.host == "api.example.com") {
    request.setHeader("Authorization", "Bearer xxx");
}

批量修改

// 批量修改 User-Agent
request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...");

2.3 响应模拟功能

Map Local

  1. 右键请求 -> Map Local
  2. 选择本地文件(.json/.html 等)
  3. 支持动态变量:${request.url}

Map Remote

// 规则配置
if (request.url.path == "/api/data") {
    response.body = '{"status":"mock","data": ...}';
}

Breakpoints

  1. 右键请求 -> Breakpoints
  2. 设置触发条件(URL/Header/Body)
  3. 修改请求/响应后点击 Execute

2.4 性能分析工具

时间轴分析

  • 关键指标
    • DNS Resolve
    • Connect
    • SSL Handshake
    • Send/Wait/Receive
  • 优化建议
    • 并行请求数 > 6:需优化资源加载
    • 首次字节时间 > 800ms:检查服务器响应

瀑布图优化

gantt
    title 页面加载时序
    section 请求1
    DNS      :a1, 20ms
    TCP      :a2, after a1, 40ms
    SSL      :a3, after a2, 60ms
    Send     :a4, after a3, 20ms
    Receive  :a5, after a4, 100ms
    section 请求2
    DNS      :b1, 30ms
    TCP      :b2, after b1, 50ms
    ...

2.5 弱网模拟配置

自定义规则

// 模拟 3G 网络(500ms 延迟,1.5Mbps 下行)
if (request.url.host == "api.example.com") {
    throttle.setBandwidth(1500000); // 1.5Mbps
    throttle.setLatency(500);       // 500ms
}

预设场景

  • 3G 慢速:延迟 300ms,带宽 768Kbps
  • LTE 良好:延迟 100ms,带宽 15Mbps
  • 卫星连接:延迟 600ms,带宽 256Kbps

三、典型应用场景

3.1 API 调试实战

请求验证

  1. 捕获 /api/login 请求
  2. 修改 password 参数为错误值
  3. 观察返回的 401 Unauthorized

Token 续期

// 自动刷新过期 Token
if (request.url.path == "/api/refresh") {
    let oldToken = request.getHeader("Authorization");
    request.setHeader("Authorization", "Bearer " + refreshToken(oldToken));
}

3.2 性能优化案例

资源合并

  • 原始请求:12 个 JS 文件,总大小 1.2MB
  • 优化后:合并为 3 个文件,总大小 800KB
  • 效果:请求数减少 75%,加载时间缩短 40%

缓存策略

# 优化前
Cache-Control: no-cache

# 优化后
Cache-Control: max-age=31536000, immutable

3.3 安全测试应用

SQL 注入检测

' OR '1'='1' -- 
  • 特征:参数包含特殊字符
  • 防御建议:参数化查询 + WAF 规则

敏感信息泄露

// 检测密码明文传输
if (request.url.path == "/login" && response.body.contains("password")) {
    alert("检测到密码明文传输!");
}

3.4 移动端调试

iOS 配置

  1. 设置 -> WLAN -> 配置代理 -> 手动
  2. 服务器:PC 的 IP 地址
  3. 端口:8888
  4. 安装 Charles 根证书:chls.pro/ssl

Android 配置

# 终端命令(需 ADB)
adb shell settings put global http_proxy 192.168.1.100:8888

四、高级功能集成

4.1 扩展插件生态

常用功能

  • Rewrite:自动化规则引擎
  • Map Local:本地文件映射
  • Throttle:弱网模拟
  • Compose:手动构造请求

4.2 自动化测试框架

Charles Script 示例

// 自动化测试用例
if (response.status == 404) {
    throw "检测到 404 错误!";
}

if (response.body.contains("error")) {
    throw "响应包含错误信息!";
}

持续集成

# 命令行调用
charles --config=config.xml --script=test.js

4.3 性能调优工具链

与 Chrome DevTools 集成

  1. 启动 Charles 代理
  2. Chrome 访问 chrome://net-internals/#events
  3. 对比两者捕获的请求时序

与 JMeter 协同

  1. Charles 捕获请求
  2. 导出为 HAR 文件
  3. 使用 JMeter 插件转换 HAR 为测试计划

五、实战案例分析

5.1 HTTPS 解密

配置步骤

  1. Proxy -> SSL Proxying Settings
  2. 添加 * 主机和 443 端口
  3. 安装根证书:Help -> SSL Proxying -> Install Charles Root Certificate
  4. 信任证书:系统设置 -> 证书管理

验证

# 解密后的请求头应包含
Connection: keep-alive
Upgrade-Insecure-Requests: 1

5.2 自动化测试脚本

场景:自动重试失败请求

// 规则配置
if (response.status >= 400 && response.status < 500) {
    let retryCount = request.getHeader("X-Retry-Count") || 0;
    if (retryCount < 3) {
        request.setHeader("X-Retry-Count", retryCount + 1);
        return proxy.sendRequest(request);
    }
}

5.3 移动端性能调优

步骤

  1. 捕获移动端请求
  2. 分析首次渲染时间(FMP)
  3. 优化关键资源:
    • 延迟加载非关键 JS
    • 压缩图片资源(WebP 格式)
    • 启用 HTTP/2 协议

六、常见问题解决

6.1 捕获不到流量

排查步骤

  1. 检查代理设置:Proxy -> Proxy Settings
  2. 确认证书安装:Help -> SSL Proxying
  3. 防火墙放行:允许 Charles 通过 Windows Defender 防火墙

6.2 解密 HTTPS 失败

解决方案

  1. 重新安装根证书:Help -> SSL Proxying -> Remove Certificates
  2. 清除浏览器缓存
  3. 重启 Charles 和浏览器

6.3 性能分析不准确

优化建议

  1. 禁用无关扩展:View -> Disable All Breakpoints
  2. 调整采样率:Proxy -> Throttle Settings
  3. 使用独立实例:charles --no-ui

七、最佳实践指南

7.1 捕获策略

  1. 使用 Ctrl+F 快速过滤
  2. 对敏感请求标记颜色:右键会话 -> Color
  3. 定期清理会话:Session -> Clear

7.2 分析流程

  1. 全局概览:统计面板查看总请求数/大小
  2. 协议分析:查看 HTTPS/WebSocket 占比
  3. 细节审查:Edit 标签页检查 Cookie/Token
  4. 性能瓶颈:时间轴定位慢请求

7.3 性能调优

  1. 启用压缩:Proxy -> Compression
  2. 配置自动保存:File -> Auto Save
  3. 使用 CHLS 格式:File -> Save As -> Charles Session
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值