# Charles使用介绍
Charles是常用的网络封包截取工具,在做移动开发和测试时常常需要截取网络封包来分析。
Charles是通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析, 更多详细内容移步官方网站:[https://www.charlesproxy.com/](https://links.jianshu.com/go?to=https%3A%2F%2Fwww.charlesproxy.com%2F)
Charles 虽然是收费软件,但即使不购买也能长期使用,并且功能上不会缺斤短两。唯一要付出的代价是每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时。
本文旨在介绍下常用的功能,其他更多的功能依据需求自行摸索。
## Charles在移动端测试的主要应用
## 一、Charles抓包HTTP、HTTPS
1、安装根证书:
![](https://img.kancloud.cn/50/08/50086173c87bfbbd412ff3f28b1bc118_1200x369.png)
Tips: 安装根证书,默认不信任,需要到钥匙串里,点击信任:
![](https://img.kancloud.cn/b4/58/b45801648b134093264140720cc7aa9b_1200x759.png)
将移动设备和本机置于同一个网络下,在移动设备上的网络中添加代理 -> 手动 -> 填写主机名和端口。一般来说,Charles默认的端口是8888,在Proxy -> Proxy Settings可设置。主机名就是本机的IP的地址,在Charles -> Help -> Local IP Address可查看。
![](https://img.kancloud.cn/ab/76/ab767bdae407fd53c2f25e8ef4354a67_760x872.png)
一般初次连接时会提示是否允许进行连接,点击allow允许就好了。如果不小心点击拒绝,那么有两种方法,第一种重启Charles;第二种,Proxy -> Access Contro Settings中添加移动设备的IP地址。
![](https://img.kancloud.cn/9b/0d/9b0db492d49c4ad07e1942df6c6a9c56_1200x248.png)
2、Charles抓移动设备HTTPS请求
点开 Help -> SSL Prox -> Install Charles Root Certificate on a Mobile Devices or Remote Browser
![](https://img.kancloud.cn/8d/bc/8dbc529b74fa0a53a0767442808734bd_1200x248.png)
提示很明显,先让设备连上Chalres,然后在设备上用系统浏览器访问chls.pro/ssl,然后会自动下载一个证书,选择安装证书。之后便可以抓取https协议的包了。
通过手机内证书管理程序,从设备存储空间安装
![](https://img.kancloud.cn/52/69/52696c4739354e0a63ba42d46de1e5da_337x362.png)
之后在需要的请求上,点击Enable SSL Proxy即可, 或者在Proxy -> SSL Proxy Settings中勾选上Enable,并且添加指定host。
![](https://img.kancloud.cn/0a/5a/0a5ad162d6fe3050457a18c94e83cda8_574x924.png)
例如抓取全部https,host输入通配符“ \* ”,port填443。
![](https://img.kancloud.cn/1c/06/1c06b777a6c16536c1aac7690e165bf3_1184x884.png)
#### 3、Android 7.0 HTTPS抓包
Android 7.0以上版本,Google更新了网络安全性配置,不再信任用户导入的CA根证书。所以即便是安装了证书,也得不到系统的信任,需要在应用中添加信任才行。
二、Charles过滤请求
一般来说,我们只关心特定HOST的请求。当我们仅想监控这些请求时,可以使用Charles的过滤功能。
1、Record Settings设置include/exclude
Proxy -> Recording Setttings include:需要监控的host。如果列表为空时,默认监控所有请求 exclude:不需要监控的host
![](https://img.kancloud.cn/f1/d1/f1d16d9b6b4554c394a87673753a5045_1184x788.png)
2、Filter
Filter一栏中输入需要要过滤的host或者关键字。也可以在勾选上Foucsed,并制定focus哪些host。
![](https://img.kancloud.cn/a0/93/a093203b91e5256d7a1602341f8d088d_1200x362.png)
3、Repeat
可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下。
* 我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,如下所示:
![](https://img.kancloud.cn/9e/e9/9ee95d552b1e8117c3e8de1e7fc58ce5_1200x550.png)
在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后即可执行
![](https://img.kancloud.cn/15/fb/15fb2ba54e0bf37cb972f5ff41735887_1080x596.png)
4、BlackList&WhiteList
黑名单表示对名单内的所有请求做过滤
![](https://img.kancloud.cn/2e/4b/2e4b4c65b80e755002871f4707d1f456_1080x724.png)
白名单表示仅对名单内的请求做响应
## 三、Charles网速模拟
1、Throttle Setting
Charles内置几种网络模型可直接使用,也可自定义来满足特定需求。 当然更可以只针对特定host模拟网速,只需要勾选上Only for select hosts就ok了。
![](https://img.kancloud.cn/15/55/1555600226d643c288bed096e96f2075_1072x1174.png)
四、Charles修改请求及返回值
移动端测试中,Charles最常用的应该就是修改请求返回值了,有几种方式可以实现。
1、breakpoints
像断点一样,当执行到指定规则链接时,触发breakpoints。即可以在请求到服务端前中断,也可以在返回到客户端前中断。在这个过程中便可以修改Request或者ResponseR。不过值得注意的是,在移动端的测试中,使用breakpoints会大概率导致客户端的请求超时。因为手动修改是需要花时间的,所以一般很少使用断点的操作来修改请求和返回参数。
![](https://img.kancloud.cn/1e/90/1e903854eb0a7133319997c771797290_1068x834.png)
2、重定向 -- Map Local、Map Remote
顾名思义,Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件。 Map Remote简单的实例:
![](https://img.kancloud.cn/61/cf/61cf87a791fe2164a727e1c89ff729e4_1080x672.png)
Map Local简单的实例:
![](https://img.kancloud.cn/ec/f5/ecf5a00595d5182ad52e7064a0dea47c_1080x672.png)
3、rewrite
Rewrite 功能功能适合对某一类网络请求进行一些正则替换。 Rewrite功能很强大,能很方便的在各种测试环境切来切去,就像图中列表所展示。
![](https://img.kancloud.cn/bd/5f/bd5fd66f387757b1ddd48d6969ed7a24_1086x1002.png)
- 自动化测试之程
- 第一章:adb——小识
- 一:adb介绍
- 二:adb安装与卸载
- 三:adb获取包名
- 四:adb获取日志
- 五:其他常用命令
- 第二章:LIunx
- 一:Liunx:简介
- 二:Liunx:常用命令
- 第三章:测试常见面试题
- 一:HTTP与HTTPS
- 二:token-cookie-session
- 三:定位以及数据分离
- 四:接口测试面试题
- 五:Python面试题
- 数据类型
- 1:python面试题
- 六:selenium面试题
- 七:liunx面试题
- 1:liunx查看日志
- 二:文件操作
- 八:WebSocket
- 九:腾讯面试题
- 十:关于adb的面试题
- 小结:不常见的面试题
- 模拟面试
- 第四章:selenium自动化
- 一:selenium介绍以及环境搭建
- 二:selenium项目目录解析
- 三:selenium项目方法实现
- 四:八大定位方法
- 五:selenium基本操作
- 六:selenium显示等待和隐式等待
- 七:selenium键盘操作
- 八:获取断言信息
- 九:selenium窗口操作
- 十:selenium-cookie操作
- 十二:selenium截图操作
- 第五章:Appium-Python篇
- 一:Appium介绍
- 二:windows搭建Appium
- 三:Mac版Appium搭建IOS
- 四:Appium初次启动
- 五:Capsbility详解
- 六:定位元素以及工具介绍
- 七:Appium代码实现
- 八:Capability配置数据与定位参数分离
- 九:定位方法以及元素等待
- 十:页面滑动
- 十一:appium截图
- 十二:Automator简介
- 十三:uiautomator定位方式
- 十四:Monkey介绍
- 十五:Monkey命令解析
- 十六:Monkey查看日志
- 第六章:接口自动化测试
- 一:什么是接口自动化
- 二:HTTP协议
- 三:Request接口访问
- 四:unittest使用
- 五:获取cookie以及请求处理
- 六:接口异常处理
- 七:接口测试框架设计到开发
- 八:接口测试之数据库操作
- 九:定时任务
- 第七章:Python负载工具Locust
- 一:Locust介绍
- 第八章:搭建测试环境
- 一:安装java的jdk
- 二:安装tomcat
- 三:Mysql安装
- 第九章:ios自动化系列
- 一:ios自动化介绍
- 二:ios自动化环境搭建
- 三:ios常用命令
- 第十章:测试工具系列
- 一:postman系列
- 1:postman介绍
- 2:postman界面介绍
- 3:postman请求实例
- 4:postman高阶应用
- 5:collection用例集
- 6:postman上传图片
- 7:postman上传文件
- 8:postman使用Headers
- 二:jmeter
- 三:charles