简介
- Charles 通过将自己设置为系统的网络访问代理服务器,这样所有的网络请求都会通过它,从而实现了网路请求的截获和分析。
- Charles 不仅可以分析电脑本机的网络请求(HTTP 和 HTTPS),还可以分析移动端设备的网络请求
破解版Charles安装
- 工具版本
V4.2.8
- 双击dmg,打开后输入密码
xclient.info
- 安装完毕后,使用安装包中的
charles.jar
替换应用程序中的此文件进行破解 -
安装包自带的破解文件的位置,如下图:
-
在应用程序中找到charles右击显示包内容,如下图:
- 找到应用程序中
charles.jar
文件所在的位置,并替换,如下图: - 至此破解版的Charles安装完毕,去打开吧
使用教程
- 由于简书对锚的支持不好,所以这里
请复制目录中的标题搜索来达到快速定位到指定内容的目的
目录
- Charles初始化设置@
- 截取HTTP/HTTPS数据@
- 过滤网络请求@
- 修改网络请求@
- 修改服务器返回内容@
- 模拟弱网环境@
- 服务器压力测试@
- 反向代理@
- 解决与翻墙软件的冲突@
Charles初始化设置@
- 选择菜单中的“Proxy” -> "macOS Proxy",点击
Grant Privileges
进行授权,如下图:
- 此时电脑上的任何网络请求都可以在 Charles 的请求面板中看到
-
工具界面介绍
-
Structure
将所有的网络请求按照域名划分
并展示 -
Sequence
将所有的网络请求按照时间排序
并展示
-
- 获取代理IP(
图片1位置
)和代理证书安装(图片2位置
)
截取HTTP/HTTPS数据@
- 要截获手机的网络请求就需要为 Charles 开启代理功能,选择
Proxy
-->Proxy Settings
。填写代理的端口号
并将Enable transparent HTTP proxying
勾选上 -
获取Charles的代理IP
-
iPhone
上将Charles设置为手机的代理服务器步骤:确保手机和电脑连接是同一个wifi
,点击手机wifi名称后的叹号
-->配置代理
-->手动
-->服务器
设置为图32中的IP,端口
设置为8888(Charles默认端口为8888,可以通过Proxy Setting
进行更改)-->存储
后就完成了代理设置 -
Android
(华为
手机版本)上将Charles设置为手机的代理服务器步骤:确保手机和电脑连接是同一个wifi
,长按
对应的wifi网络-->修改网络
-->勾选显示高级选项
-->点击代理,选择手动
-->设置服务器主机名
为图32中的IP,服务器端口
设置为8888(Charles默认端口为8888,可以通过Proxy Setting
进行更改)-->点击保存
后就完成了代理设置 - 截取
HTTPS
请求,需要安装Charles 的 CA 证书
- 手机上安装CA证书如下图(在手机浏览器里输入
chls.pro/ssl
): - 不管在手机上还是电脑上都要设置信任证书
- 电脑上在
keychain
处将新安装的证书设置为永久信任
- 手机上安卓和iPhone的设置有所不同,这里说下
iPhone
的设置,安装完CA证书后,首先在通用
里的描述文件
里安装描述文件,安装完描述文件后在关于手机
里找到证书信任设置
设置为信任即可,此时重启App
就可以抓包HTTPS的请求了
- 电脑上在
- 另外有时会出现即使安装了
CA 证书
,Charles 还是不捕获 HTTPS 协议的网络请求,这时可以在Proxy
-->SSL Proxying Setting
-->点击 Add 按钮
--> 在弹出的对话框设置里添加需要监听的 HTTPS 域
或者使用*:
表示监听所有 HTTPS 请求 - 设置完毕,就可以抓取 HTTPS 网络请求了
过滤网络请求@
- 方法1:直接在
Filter
中输入关键字进行过滤
- 方法2:首先选中你想查看的请求,右键在菜单中勾选
Focus
,这样就可以只查看你感兴趣的请求了
- 方法3:忽略你不感兴趣的请求,右键在菜单中勾选
Ignore
,这样就可以过滤掉你不感兴趣的请求了 -
方法4:如果你不想每次都设置,可以将你经常查看的设置好,这样就不需要每次都要设置过滤了
修改网络请求@
- 对于捕获的网络请求,我们经常需要修改网络请求的URL、Headers、Cookie等信息。Charles 提供了对网络请求的编辑和重发功能。
- 只需要
选中需要修改编辑的网络请求
,按下图进行操作
修改服务器返回内容@
- 为了方便调试代码,我们会有这种需求,修改接口返回的数据来模拟各种场景
- Charles 为我们提供了超实用的功能,
Map功能(Map Local、Map Remote)
、Rewrite功能
、Breakpoints功能
,都可以实现修改服务端返回数据
的功能,但是有区别和适用场景:-
Map 功能
适合长期
地将某一请求重定向
到另一个指定的网络地址
或者本地 JSON 文件
-
Rewrite 功能
适合对网络请求进行一些正则替换
-
Breakpoints 功能
适合对网络请求进行一些临时性的修改
(类似于断点作用
,使用了此功能会在请求发出前
和接收到响应数据后
都能断住
来达到修改数据的目的)
-
Map功能
-
Map Local
功能- 将某个网络请求重定向到本地 JSON 文件
-
先将某个接口的响应内容保存下来(选择对应的网络请求,右击点击 Save Response )成为 data.json 文件
- 然后编辑json数据为我们想要的目标映射文件
-
将一个网络请求的内容映射到我本地的一个 JSON 文件,之后这个请求的内容都从网络变为返回我本地的数据了
Map Local 可能会存在一个小缺陷,其返回的 HTTP Response Header 与正常的网络请求不一样,如果程序设置了校验 Header 信息,此时 Map Local 就会失败,解决办法是同时使用 Rewrite功能将相关的HTTP 头部信息 Rewrite 成我们需要的信息
-
Map Remote
功能- 将网络请求重定向到另一个网络接口,适合于切换
线上到本地
、测试服务到正式服务
的场景。比如:从测试服务切换到正式服务
- 将网络请求重定向到另一个网络接口,适合于切换
-
取消Map功能
Rewrite功能
- Rewrite 适合对某个网络请求进行正则替换,以达到修改结果的目的
- 可以针对特定的网络请求进行 Rewrite,选择
Tools
-->Rewrite
在弹出的面板上勾选Enable Rewrite
。点击左下角的Add按钮
,设置Name
便于辨识(如果有多个 Rewrite,为了后期容易区分
),需要同时设置
Protocol、Port、Host、Path信息 - 然后对指定的
Type 和 Action
进行 Rewrite。Type 主要有Add Header
、Modify Header
、Remove Header
、Host
、Path
等等。Where
可以选择Request 和 Response
。指的是下面的修改是针对 Request 还是 Response - 完成设置后点击
Apply
按钮,即可生效。下次继续请求该网络,返回的内容就是我们刚刚设置的内容
Breakpoints 功能
- 对网络请求进行一些
临时性的修改
(类似于我们开发的断点作用
) - Breakpoints 只存在于设置过的当前的网络请求,Charles 关闭后下次打开 Breakpoints 消失了
- 对于我们设置了 Breakpoints 的网络请求, Charles 会在下次继续访问该请求的时候停止掉,就跟 debug 一样。此时我们可以
Edit Request
,修改过 Request 之后点击右下角的Execute
按钮。然后等到服务端返回的时候继续是断点状态,此时可以Edit Response
,修改过 Request 之后点击右下角的Execute
按钮。 - 对某个请求设置Breakpoints:选中要设置的网络请求 -> 右击 -> 点击
Breakpoints
-
效果如下:依次为编辑Request - 编辑Response - 最终效果
模拟弱网环境@
- 选择
Proxy
-->Throttle Settings
- 如果你想对
指定主机
进行弱网环境下的测试,可以点击上图的Add按钮
,在弹出的面板上设置协议、主机、端口
来对指定的主机进行弱网设置
服务器压力测试@
- 选中某个网络请 -->
右击
-->Repeat Advanced
--> 弹出如下设置框 - 在弹出的面板里面设置总共的
迭代次数(Iterations)
、并发数(Concurrency)
、请求间隔时间(Repeat delay(ms))
- 专业的压力测试工具可以使用LoadRunner
反向代理@
- Charles 的反向代理功能允许我们将本地指定端口的请求映射到远程的另一个端口上
- 菜单栏
Proxy
-->Reverse Proxies
,下图表示将本地的9999
端口映射到远程的80
端口上,即:当访问本地的9999
端口,实际返回的就是远程80
端口的提供的内容
解决与翻墙软件的冲突@
- 以下方法适用于开启VPN时如何让VPN和Charles和平共处
-
在 Charles 的 External Proxy Settings 中将翻墙的代理端口等信息填写
- 需要关闭翻墙软件的自动设置,更改为
手动模式