找回密码
 立即注册
首页 业界区 科技 Charles实战秘籍:弱网模拟、Map Local/Remote、HTTPS抓 ...

Charles实战秘籍:弱网模拟、Map Local/Remote、HTTPS抓包详解

闵雇 3 天前
作为移动端和前端开发者,我们每天都在与网络请求打交道。无论是调试接口问题、优化网络性能,还是模拟各种网络环境,一个好用的抓包工具都能让我们的工作效率大幅提升。而在众多抓包工具中,Charles无疑是最受欢迎的专业选择之一。
本文将深入探讨Charles的三个核心实用功能:弱网模拟、Map Local/Remote和HTTPS抓包,通过详细的操作步骤和实际应用场景,帮助你掌握这些高级技巧。
一、Charles简介与基础配置

Charles是一款基于HTTP/HTTPS协议的抓包工具,支持Windows、Mac和Linux系统。它通过代理方式捕获客户端与服务器之间的网络通信,提供了丰富的功能包括请求拦截、修改、重放和性能监控等。
安装与基本配置

首先从Charles官网下载并安装相应版本。启动后,我们需要进行一些基本配置:

  • 代理设置:Charles默认监听8888端口,确保手机和电脑在同一局域网,然后在手机Wi-Fi设置中配置代理服务器为电脑IP,端口8888
  • 防火墙设置:如果Charles无法接收连接,可能需要配置防火墙允许8888端口的入站连接
  • 证书安装:为了解析HTTPS请求,需要在客户端安装Charles的根证书(具体步骤将在HTTPS抓包部分详细说明)
二、弱网模拟:真实还原恶劣网络环境

在现代移动应用开发中,考虑到用户可能处于各种网络环境中,弱网测试已成为必不可少的一环。Charles的弱网络模拟功能可以帮助我们模拟各种恶劣网络条件,而不需要实际寻找这些环境。
为什么要进行弱网测试?


  • 发现常规网络环境下难以暴露的bug
  • 评估应用在恶劣条件下的稳定性和用户体验
  • 优化资源加载策略和超时机制
  • 测试重试机制和错误处理的可靠性
配置弱网模拟参数

打开Charles,进入"roxy" -> "Throttle Settings",可以看到以下主要配置项:

  • Bandwidth(带宽):决定数据传输速率

    • 吞吐量:设置最大上行/下行速度(KB/s)
    • 利用率:带宽使用百分比
    • Round-trip latency:往返延迟(ms)

  • Reliability(可靠性):模拟不稳定的网络

    • 可靠性:网络连接的成功百分比
    • 稳定性:网络连接稳定性百分比

  • MTU(最大传输单元):设置数据包大小
  • Throttling preset:内置的网络预设模板,如3G、4G等
自定义弱网场景配置

除了使用预设模板,我们可以创建自定义场景:
  1. - 场景名称:中国地铁隧道网络- 带宽:下行50KB/s,上行20KB/s- 延迟:500ms- 可靠性:80%- 稳定性:70%
复制代码
实战技巧:分域名限速

Charles允许我们针对特定域名设置不同的网络规则,这一功能非常实用:

  • 启用"Only for selected hosts"
  • 添加需要限速的域名
  • 为不同域名设置不同的限速规则
这样我们可以模拟例如"图片服务器慢但API服务器正常"的真实场景。
弱网测试的最佳实践


  • 分层测试:不要一开始就使用极端条件,先从轻度限速开始逐步加强
  • 结合业务场景:根据应用特点设计测试用例。例如:

    • 视频类应用:重点测试带宽波动对播放体验的影响
    • 即时通讯应用:重点测试延迟和可靠性对消息收发的影响

  • 监控关键指标:

    • 页面加载时间
    • 请求失败率
    • 超时比例
    • 用户操作响应时间

  • 自动化集成:可以将Charles的弱网模拟与自动化测试框架结合,实现定期自动化弱网测试
三、Map Local:本地文件替换网络请求

Map Local功能允许我们将特定网络请求重定向到本地文件,这对于前端开发和接口调试极其有用。
应用场景


  • 前后端并行开发:后端接口尚未完成时,前端可以使用本地Mock数据开发
  • 接口调试:修改响应数据测试各种边界情况
  • 问题复现:保存问题现场的响应数据,方便后续分析
  • UI开发:使用精心设计的本地数据确保UI在各种状态下正常显示
配置Map Local


  • 在Charles中选中需要映射的请求
  • 右键选择"Map Local"
  • 选择本地映射文件
  • 配置匹配规则(可选)
高级匹配规则

Charles提供了灵活的匹配规则配置:

  • 完全匹配:只有URL完全相同时才触发映射
  • 通配符匹配:使用*匹配任意字符
  • 正则表达式匹配:最灵活的匹配方式,可以匹配复杂模式
实战示例:模拟各种接口状态

假设我们需要测试一个用户接口的各种返回状态:

  • 正常情况:返回完整的用户数据
  • 空数据:返回空数组或空对象
  • 异常情况:返回错误码和错误信息
  • 大数据量:返回大量数据测试页面性能
我们可以为同一接口创建多个不同版本的本地文件,通过快速切换来测试各种场景。
使用技巧与注意事项


  • 文件更新:修改本地文件后,Charles会自动使用最新版本,无需重新配置
  • 禁用映射:可以临时禁用某个映射而不删除它
  • 组合使用:可以同时启用多个映射规则,Charles会按顺序匹配
  • 性能影响:大量使用Map Local可能会轻微影响Charles性能
四、Map Remote:请求重定向与接口调试

Map Remote功能允许我们将请求重定向到另一个远程地址,这在多种场景下非常有用。
与Map Local的区别


  • Map Local:重定向到本地文件
  • Map Remote:重定向到另一个URL
应用场景


  • 测试环境切换:将生产环境请求重定向到测试环境
  • 灰度测试:将部分用户请求导向新版本服务
  • 接口调试:将请求导向修改后的API版本
  • 故障模拟:将请求导向模拟故障的服务端
配置Map Remote


  • 选中目标请求,右键选择"Map Remote"
  • 配置映射规则和目标地址
  • 设置匹配规则(可选)
高级应用:部分路径重定向

有时我们只需要重定向API的特定路径:
  1. 原始地址:https://api.example.com/v1/user/profile目标地址:https://test-api.example.com/v1/user/profile
复制代码
可以使用通配符匹配:
  1. 映射规则:https://api.example.com/* -> https://test-api.example.com/*
复制代码
实战案例:A/B测试后端切换

假设我们正在对某个API进行A/B测试:

  • 版本A:现有算法
  • 版本B:新优化算法
我们可以配置Map Remote规则,将特定用户(如通过cookie或URL参数标识)的请求导向不同的后端服务,从而实现A/B测试流量的灵活控制。
注意事项


  • SSL证书:重定向到HTTPS地址时需要确保证书有效
  • CORS问题:跨域重定向可能遇到浏览器CORS限制
  • Cookie处理:重定向后Cookie可能不会自动带到新域名
  • 缓存问题:浏览器可能会缓存重定向,导致测试结果不准确
五、HTTPS抓包详解与安全调试

HTTPS抓包是Charles最强大但也最复杂的特性之一。它通过中间人代理方式解密HTTPS流量,让我们能够查看和修改加密的请求内容。
HTTPS抓包原理

Charles作为中间人代理,分别与客户端和服务器建立HTTPS连接:

  • 客户端与Charles建立连接,Charles出示自己的证书
  • Charles与服务器建立连接,获取服务器证书
  • Charles解密客户端请求,重新加密后发送给服务器
  • Charles解密服务器响应,重新加密后发送给客户端
配置HTTPS抓包

1. 安装Charles根证书

首先在Charles中导出根证书:

  • 访问chls.pro/ssl下载证书(手机)
  • 或通过Help -> SSL Proxying -> Export Charles Root Certificate导出证书
然后在客户端安装并信任该证书:
iOS设备:

  • 通过Safari访问chls.pro/ssl下载证书
  • 进入设置->已下载描述文件安装证书
  • 在设置->通用->关于本机->证书信任设置中完全信任Charles证书
Android设备:

  • 将证书下载到设备
  • 进入设置->安全->加密与凭据->安装证书
  • 选择CA证书并找到下载的证书文件
Mac电脑:

  • 将证书拖入钥匙串访问
  • 找到Charles Proxy证书,双击打开
  • 展开信任选项,选择"始终信任"
Windows电脑:

  • 右键证书文件选择安装证书
  • 选择"当前用户"或"本地计算机"
  • 选择"将所有证书放入下列存储",浏览选择"受信任的根证书颁发机构"
2. 配置SSL代理设置

在Charles中,选择"roxy" -> "SSL Proxying Settings":

  • 启用"Enable SSL Proxying"
  • 添加需要抓包的域名和端口(如*:443匹配所有HTTPS流量)
解决常见HTTPS抓包问题

证书信任问题

如果出现证书错误,通常是因为:

  • 证书未正确安装或信任
  • 设备日期不正确
  • 证书已过期(Charles证书默认有效期为7个月)
应用无法连接网络

某些应用使用了证书绑定(Certificate Pinning)技术,会验证服务器证书是否与预期一致,这种情况下Charles无法解密流量。解决方法:

  • 调试版本禁用证书绑定
  • 使用越狱/root设备安装特殊插件绕过限制
  • 使用低版本应用(尚未实现证书绑定)
高级技巧:处理特殊应用的抓包

对于一些特殊应用(如银行、支付类应用),可能需要额外步骤:

  • Android 7+:需要将Charles证书添加到系统信任区而非用户信任区,这通常需要root权限
  • iOS:某些应用使用了更严格的证书检查,可能需要越狱设备或重新签名应用
  • 双向SSL认证:对于使用客户端证书的应用,需要在Charles中配置客户端证书
安全与隐私考虑

使用HTTPS抓包时需要注意:

  • 合法使用:仅对自己的应用或获得授权的应用进行抓包
  • 敏感信息:抓包可能暴露密码、令牌等敏感信息,确保在安全环境中操作
  • 数据保护:及时清理抓包数据,避免敏感信息泄露
六、综合实战:Charles在真实项目中的应用

案例一:电商应用网络优化

通过Charles分析发现,某电商应用首页加载缓慢:

  • 使用弱网模拟发现图片加载策略不佳
  • 通过Map Local模拟各种网络条件下的用户体验
  • 使用Map Remote将部分用户流量导向优化后的接口
  • 通过HTTPS抓包分析API响应数据,优化数据格式
最终通过以下措施提升性能:

  • 实现图片懒加载和自适应分辨率
  • 优化API减少不必要的数据字段
  • 添加请求缓存和合并机制
案例二:金融应用异常处理测试

使用Charles测试金融应用的异常处理:

  • 创建各种错误响应的本地映射文件
  • 使用Map Local模拟服务器返回各种错误码
  • 测试应用在网络波动条件下的交易可靠性
  • 验证安全令牌过期后的重新认证流程
通过这些测试发现了多个边界情况下的处理漏洞,显著提高了应用的稳定性。
案例三:多环境API调试

开发过程中需要频繁在不同环境间切换:

  • 配置多个Map Remote规则对应不同环境

    • 开发环境:dev-api.example.com
    • 测试环境:test-api.example.com
    • 预发布环境:stag-api.example.com

  • 使用Charles的Tools菜单快速切换环境
  • 结合Breakpoint功能修改请求参数后再发送到不同环境
这样无需修改应用代码或重新打包,就能在不同环境间快速切换调试。
七、Charles高级功能与技巧

1. 断点调试(Breakpoints)

断点功能允许我们拦截特定请求,在请求发送前或响应返回后修改其内容:

  • 在需要拦截的请求上右键选择"Breakpoints"
  • 触发请求后Charles会自动暂停请求
  • 编辑请求参数或响应内容
  • 执行修改后的请求或响应
2. 重复请求(Repeat)

选中历史请求,右键选择"Repeat"可以重放请求,这对于测试接口幂等性和性能非常有用。
高级用法:"Repeat Advanced"可以设置重复次数和并发数,用于压力测试。
3. 组合操作(Compose)

Compose功能允许我们手动构建和发送HTTP请求,适用于快速测试API接口。
4. 序列与会话(Sequence/Session)

可以将一系列相关请求组织成会话,方便整体分析和导出。
八、Charles性能优化与最佳实践

性能优化


  • 限制抓包数量:过多请求会影响Charles性能,可以设置抓包数量上限
  • 选择性抓包:通过Include/Exclude列表只抓取需要的域名
  • 关闭不需要的功能:如不使用时关闭Breakpoints、Throttling等功能
  • 定期清理:定期清理历史请求记录释放内存
最佳实践


  • 项目配置导出:将Charles配置导出为文件,方便团队共享和版本管理
  • 分级使用:根据需求使用不同功能级别,简单问题不需要开启复杂功能
  • 结合其他工具:Charles与浏览器开发者工具、Wireshark等工具结合使用
  • 安全意识:生产环境谨慎使用Charles,避免敏感信息泄露
结语

Charles作为一款功能强大的网络调试工具,掌握了它的核心功能将极大提升我们的开发调试效率。本文详细介绍了弱网模拟、Map Local/Remote和HTTPS抓包这三个最实用的功能,希望通过这些内容能够帮助你更好地使用Charles解决实际开发中的问题。
记住,工具的价值在于如何使用它解决实际问题。不断探索Charles的更多功能,结合自己的业务场景灵活运用,你会发现它在日常开发中的无限可能。
你是否也有使用Charles的精彩案例或独特技巧?欢迎在评论区分享你的经验!
本文原创于【程序员二黑】公众号,转载请注明出处!
欢迎大家关注笔者的公众号:程序员二黑,专注于软件测试干活分享,全套测试资源可免费分享!
最后如果你想学习软件测试,欢迎加入笔者的交流群:785128166,里面会有很多资源和大佬答疑解惑,我们一起交流一起学习!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册