登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
科技
›
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等
自定义弱网场景配置
除了使用预设模板,我们可以创建自定义场景:
- 场景名称:中国地铁隧道网络- 带宽:下行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的特定路径:
原始地址:https://api.example.com/v1/user/profile目标地址:https://test-api.example.com/v1/user/profile
复制代码
可以使用通配符匹配:
映射规则: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,里面会有很多资源和大佬答疑解惑,我们一起交流一起学习!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Charles
实战
秘籍
弱网
模拟
相关帖子
Java集合框架实战应用指南
模拟蜘蛛
MySQL 字符串替换实战指南:2 个函数搞定 90% 业务需求
解密prompt系列60. Agent实战:从0搭建Jupter数据分析智能体
TypeScript 队列实战:从零实现简单、循环、双端、优先队列,附完整测试代码
漏洞实战--java反序列化--用友NC UserAuthenticationServlet
JWT攻击详解与CTF实战
鸿蒙应用开发从入门到实战(二):DevEco Studio工具安装
从基础到实战:一文吃透 JS Tuples 与 Records 的所有核心用法
Drift数据库开发实战:类型安全的SQLite解决方案
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
Java集合框架实战应用指南
0
760
颛孙中
2025-09-02
软件
模拟蜘蛛
1
46
新程序
2025-09-03
业界
MySQL 字符串替换实战指南:2 个函数搞定 90% 业务需求
0
454
奸轲嫣
2025-09-05
业界
解密prompt系列60. Agent实战:从0搭建Jupter数据分析智能体
0
369
赊朗爆
2025-09-08
业界
TypeScript 队列实战:从零实现简单、循环、双端、优先队列,附完整测试代码
0
261
蓟晓彤
2025-09-09
安全
漏洞实战--java反序列化--用友NC UserAuthenticationServlet
0
655
锦惺
2025-09-09
业界
JWT攻击详解与CTF实战
0
330
癖艺泣
2025-09-10
业界
鸿蒙应用开发从入门到实战(二):DevEco Studio工具安装
0
975
府扔影
2025-09-11
业界
从基础到实战:一文吃透 JS Tuples 与 Records 的所有核心用法
0
958
陆菊
2025-09-11
业界
Drift数据库开发实战:类型安全的SQLite解决方案
0
988
届表
2025-09-12
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
闵雇
3 天前
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
杭环
9988
凶契帽
9988
4
氛疵
9988
5
黎瑞芝
9988
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多