From:https://www.cnblogs.com/wenjun145/p/12995535.html
1、下载安装
1. 下载地址:https://www.charlesproxy.com/latest-release/download.do
2. 下载之后安装。按照默认next 即可,然后选择路径。
3. charles 。PJ:https://www.zzzmode.com/mytools/charles/
按照下方文字填好,点击生成,会生成一个 jar 包,这个 jar 包是本地 lib 中已经存在的,将它替换。
再次重启即可。。。
2、安装证书
在弹出的 证书窗口中 ---> 安装证书 ---> 本地计算机 ---> 证书存储( 浏览 )---> 手信任的根证书颁发机构 ---> 下一步 ---> 完成
- http 代理:菜单栏 Proxy ----> 勾选 "Windows Proxy" ,抓取电脑本地发送的请求,展开相关域
- https 代理:菜单栏 Proxy ---> SSL Proxying Settings ---> 勾选 "Enable SSL Proxying" 。
允许所有SSL代理:Add ---> Host : * 和 Port : 443 。这样设置就可以使得所有带锁请求允许被操作
移动端配置
- 查看 Charles 端口:Proxy ---> Proxy Settings ---> Port:8888,勾选 "Enable transpare proxying"
- 查看电脑 IP:Help ---> Local IP Address
- 手机端 WiFi 配置:WiFi ---> 修改网络 ---> 代理 ---> 然后输入电脑IP、端口(代理端口8888)
- 返回 Charles,界面弹出连接 IP 提示,点击 Allow ---> 完成配置
设置好代理后,需要安装 charles 的 证书,安装好证书后,才能解密 https 的流量。。。
3、Charles 基本功能
Charles 工具的几个重要按钮:
- 扫帚 图标:清屏
- 圆点 图标:抓包 / 停止抓包
- 锁 图标:开始 / 停止 SSL 代理
- 乌龟 图标:模拟弱网络( 流量控制 )
- 六边形 图标:断点
- 钢笔图标:构造一个请求,然后发送,即模拟请求
- 刷新 图标:重新发送选中的请求
- 对勾:
- 工具 图标:一些工具。断点,映射,篡改,DNS 洪泛
- 设置 图标:设置
界面 Structure 模式( 按域名网站显示 ):
- 以域名划分请求信息,便于定位需求分析和处理的数据
- 请求的数据结构一目了然
- 关键字段:Overview 即 概要, Contents :即 内容
Sequence 模式( 按请求顺序显示 ):
- 以数据请求速度快慢的顺序去执行,请求快的就在前面显示,可以清晰的看到全部请求,以及请求中的资源请求、图片、文本、音乐等。其中,Filter 可以过滤请求
过滤抓取请求
开始抓包后,随着时间的推移,抓取到的网络包越来越多,这是我们可以使用过滤功能,来过滤出我们想要的网络请求。
在Proxy -> Recording Settings
中可以设置网络包的过滤选项。
过滤选项中有Include
和 Exclude
两种选项。只有当 Include
为空时,Exclude
中的设置才会生效。过滤条件支持通配符。
模拟慢速网络
在做iPhone开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles对此需求提供了很好的支持。
在Charles
的菜单上,选择"Proxy"->"Throttle Setting"项,在之后弹出的对话框中,我们可以勾选上“Enable Throttling”,并且可以设置Throttle Preset
的类型。如下图所示:
修改网络包
修改历史请求
可以将历史的请求修改后,再次发送。
只需选中某个请求,点击上方工具栏中的蓝色钢笔按钮(第四个),就可以进行修改。完成修改后,点击下方的Execute
执行请求。
添加断点
窗口上方的工具栏中,第四个按钮就是Enable BreakPoints
,用来启用或禁用断点。也可以在 Proxy -> BreakPoints Setting
中设置更多具体内容。
在Charles
中可以像调试程序一样添加断点。方法是右键点击左侧窗口的某个请求,选择BreakPoints
添加断点。这样当这个请求发出或者收到response
的时候,就会先被Charles
拦截下来,并触发断点。
触发断点后,可以对断点的网络包进行各种编辑,然后再继续。点击Execute
就可以继续。
同时,也可以在Proxy -> BreakPoints Setting
设置断点的各种规则。例如,是在request
的时候触发还是 response
的时候。
由于设置断点时,Charles
是先拦截下整个网络包,再触发断点,当网络包比较大的时候,常常会导致应用超时,触发网络错误的警告,因此,自动地根据规则修改网络包有时显得尤为重要。这就是下面要说的篡改。
拦截后可以修改post
参数
然后可以修改Response
,不用去麻烦测试修改数据,
设置断点。在请求位置右键,选择Breakpoints
然后选择Proxy的Breakpoint Settings选项,点击进入设置
点进去可以看到我们添加到Breakpoint 的所有请求,双击我们要改的那个请求,如果想断请求,勾选Request,想断响应,勾选Response
设置后点击OK,关闭上面的弹窗,下面的弹窗中我们勾选想断的请求,点击OK
下次请求就可以断请求或者响应了
改写后点击 Execute执行 ,注意改的时候,客户端一般有超时限制(过了超时时间就不会等服务端的返回数据了),所以一般只适用改动较小的测试或者异常测试
篡改(Rewrite)
Rewrite
是按照一组事先设置的规则,篡改特定的网络包中的数据。
在 Tools -> Rewrite
中,选中Enable Rewrite
来开启 Rewrite
。
Rewrite
勾选 Debug in Error Log
选项,就能在 Charles
控制台中看到 Rewrite
的记录。
首先要在右侧的规则列表中添加一个新规则。在新规则中添加要Rewrite
的Location
,然后再下方添加具体的篡改规则。规则中可以使用通配符。
这样稍后匹配条件的网络包到达的时候,Charles
就会自动将其中的内容按规则篡改。
示例:比如 192.168.1.2:8888/a/b/test 与192.168.1.3:8888/a/b/test 两个请求就要分别映射,而 Rewrite 就可以解决这个问题 ,可以把所有的请求url为/a/b/test的请求都构造成同一个数据。
方法:
- 1、入口:Tools-》Rewrite
- 2、勾选 Enable Rewrite,点击Add
- 3、Name根据自己情况随便写,Add后Path路径填写我们请求的url,点击OK
然后Add返回值,选择response,Type选择body,直接把要构造成的json串写到Value中,Ok
下次请求,就会发现192.168.1.2:8888/a/b/test 与192.168.1.3:8888/a/b/test 两个请求都返回了我们自己的json数据。
rewrite还可以批量修改我们的请求参数,比如把所有的上传的did参数都由ANDROID_4af16d720602b56改为ANDROID_123456123456,我们可以按照下图构造:
其中上面部分具体内容为:
下半部分具体内容为:
这样下次请求,我们的did参数就变为我们想要的ANDROID_123456123456了。这种方法对 有要求手机等为新设备才执行某策略的功能点很适用。
映射 Map
Charles
提供的映射功能可以将本地文件或者远程的服务器作为某个请求的 Response
。可以方便地进行一些特殊的测试。
- Map Local。本地映射。在
Tools -> Map Local
。可以选择一个本地文件作为某个请求的Response
,并且Charles
会帮你封装好Response
。 - Remote Remote。远程映射。和本地映射的功能类似,只是将数据源换成了远程服务器。相当于将请求交给另一个服务器处理
在主机名上右键,选择 map remote
在弹出的弹窗中,填写要映射到的地址
映射本地。在一个请求上 右键 ---> 选择map local
模拟弱网
Charles
还可以模拟不同网速环境,可以很方便地测试应用在网络差的情况下的bug。
在 Proxy -> Throttle Settings
中勾选 Enable Throttling
,或者直接点击窗口上方的工具栏中的 乌龟🐢按钮 就可以启用,这个按钮十分形象。
在Proxy -> Throttle Settings
中,添加要针对的Locations
,如果选中Only for selected hosts
,并且Locations
中有数据,则只有 Locations
列表中的请求会被限速,否则会对全局限速。在Throttle Configuration
中可以对网络环境进行十分详细的配置,包括网络的稳定程度、网速、环境等。
SSL 代理
在使用 Charles
的过程中,我们会发现,只有未加密的 Http
请求才能被Charles
正确的解析出数据,其余的Https
请求都处于加锁的状态,但我们不可避免的需要抓取 Https
的包。SSL
代理就可以完美解决这个问题。
要启用 SSL
代理,先要在 Proxy -> SSL Proxying Settings
中勾选 Enable SSL Proxying
,然后配置要代理的 Location
,一般可以直接填星号,以匹配所有请求。
安装 Charles 的证书
Charles
中的HTTPS
代理的原理是,Charles
充当一个中间人,针对目标服务器动态地生成一个使用Charles
根证书(Charles CA Certificate)签名的证书;请求发生的时候, Charles
会接收web 服务器的证书,而把自己生成的证书给客户端看。
因此在在使用Charles
作为HTTPS
代理时,客户端在请求HTTPS
接口的时候会弹出安全警告,提示Charles
根证书不被信任。我们需要添加Charles
根证书为信任证书中。
方法如下:
- 1、点击
Help -> SSL Proxying
,根据被抓包设备的类型,来选择对应的安装选项(如果是OSX
就直接选择Install Charles Root Certificate
); - 2、如果是
iOS
真机,则会弹出下面的提示,此时不用按上面的提示来配置代理,只要按照上文的步骤配置过代理了就可以了。然后在Safari
中打开chls.pro/ssl
安装Charles
的证书,就 OK 了。
设置好
SSL
代理后,HTTPS
请求就统统解锁啦!注意:iOS9 以上系统要使用 Charles 作为 SSL 代理的话要关闭 APP Transport Security ,关闭方法为在 APP的 info.plist 文件添加以下key:
<key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/> </dict>
Charles 是一个强大的抓包调试工具,它的功能远不止这些
配合 Postman
Postman
是一个测试API
的利器。