简介
Charles 是在 Mac 下常用的网络抓包工具,在开发过程中与服务端调式接口的必备利器。
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
Charles 主要的功能包括:
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
安装
下载地址
破解
Charles 是一个收费软件,在天朝,看到收费两个字,呵呵之~
破解jar生成
替换jar包
macOS: /Applications/Charles.app/Contents/Java/charles.jar
Windows: C:\Program Files\Charles\lib\charles.jar
配置代理
浏览器
选择菜单中的 “Proxy” -> “macOS Proxy” 将 charles 设置为系统代理(需要授权),然后我们就可以在Charles界面看到网络请求。Windows系统类似
iOS Device
iOS 设备我们需要手动的设置 Http 代理
设置 -> 无线 -> 已连接WIFI -> 配置代理 -> 手动
服务器地址为 运行charles的电脑 ip 地址,端口默认为 8888
Android
- 配置手机 wifi 网络代理
设置 -> 无线网络 -> WIFI -> 长按 -> 修改网络 -> 显示高级选项 -> 代理 -> 手动
部分手机被隐藏,可以通过语音助手唤起 “”proxy””
- 硬编码
|
|
or
|
|
Charles 使用
视图介绍
Structure : 视图将网络请求按访问的域名分类。
Sequence : 视图将网络请求按访问的时间排序。
过滤请求
Sequence 视图,在 Filter 栏中输入关键字
用于临时过滤的场景Recording Setting -> include
用于固定过滤,比如过滤 jinhui365.comFocus 过滤
- Structure 视图 : 网络请求右击,选择”Focus”,仅展示过滤的请求,其他请求放入 “Other Hosts” 目录。
- Sequence 视图 : 网络请求右击,选择”Focus”,并且勾选Filter栏右侧checkbox,仅展示过滤的请求
Https请求
成功的抓到了网络请求,却发现有很多的红✘✘,强迫症郁闷了。。。
查看发现,出现红✘的请求全部是 https 协议,想要分析该请求,需要安装 Charles 的 CA 证书。
- Mac 证书安装
- 安装证书
“Help” -> “SSL Proxying” -> “Install Charles Root Certificate” - 证书配置
step完成后,在弹出的钥匙串对话框中,双击 charles 证书,将其设置为始终信任
- 移动设备证书安装
- 移动设备设置 Http 代理
- 手机浏览器访问 chls.pro/ssl 下载并安装证书
- 开启 SSL Proxying
右键网络请求,点击 Enable SSL Proxying 菜单项
Proxy - > SSL Proxying Setting -> 勾选 Enable SSL Proxying -> 添加域名
- Https 抓包
网速模拟
在我们移动开发或测试工作中,常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。
在 Charles 菜单, 选择 Proxy -> Throttle Setting ,勾选 Enable Throttling
如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项。
修改/重发 Request
Charles 提供了网络请求的修改和重发功能,接口调试更方便,有么有。。。
- 修改 Request
右键网络请求 -> 菜单项 -> Compose
我们可以修改请求的任何信息,Url地址、参数、端口、Header 等等,点击 Execute 执行网络请求
- 重发 Request
右键网络请求 -> 菜单项 -> Repeat/Repeat Advanced
Repeat 仅重试一次,Repeat Advanced 可以设置 重试次数,线程数量,重试间隔等等,可以做简单的服务器压力测试
修改 Response
作为移动开发,经常需要服务器返回一些特殊的内容,方便我们调式一些情况,比如数据为空,数据异常,请求超时等等。又是一个很实用的功能,有木有。。
Charles 提供了Map,Rewrite及Breakpoints三种方式修改Response
Map: 适合长期将某一些请求重定向到另一个 Url 或者本地文件
Rewrite : 适合对网络请求进行一些正则替换
Breakpoints : 适合一些临时性的修改
Map
- Map Remote : 将指定网络请求重定向到另一个网络地址 ,Tools -> Map Remote
- Map Local : 将指定网络请求重定向到本地文件 ,Tools -> Map Local
Rewrite
Rewrite 功能适合某一个请求进行一些正则替换。Tools -> Rewrite
举个例子:将我们的资产接口中访问 “高端理财”替换为”超级理财”,再也不需要张普同学跑回工位改代码了。。。
Breakpoints
Rewrite 功能适合做批量和固定的替换,很多时候我们只是修改一次请求的Response,Rewrite 就感觉有些繁琐了。
Breakpoints 功能类似我们开发过程中的断点,当指定的网络请求发生,Charles 截取到该请求但并未返回结果,这时我们可以修改网络请求的返回内容。
添加断点
双击请求 -> 勾选 Breakpoints断点设置
Proxy -> Breakpoints Setting修改请求内容
- 完成了前面两步操作,再次发起接口请求,会弹出断点对话框
- 点击 Edit Response ,修改Body
- 点击 Execute ,将Body返回
Tip:使用 Breakpoints 功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时。
总结
通过 Charles 软件,我们可以很方便地在日常开发中,截取和调试网络请求内容,分析封包协议以及模拟慢速网络。用好 Charles 可以极大的方便我们对于带有网络请求的 App 的开发和调试。