简介
Charles是一个HTTP代理/ HTTP监视器/反向代理,使开发人员能够查看其机器和Internet之间的所有HTTP和SSL / HTTPS流量. 这包括请求,响应和HTTP标头(包含cookie和缓存信息).
安装
下载地址: https://www.charlesproxy.com/download/
mac下载的dmg格式,正常安装即可.
Charles安装后默认是试用版本,有效期30天,需要注册激活码.
工具视图
- 在顶部导航是基本设置、代理设置、工具、帮助等.
- 中间位置是请求的接口名字、请求内容、响应内容等.
- 通常查看请求会使用"Structure"视图和"Sequence"视图.
- Structure是按照接口结构来归档汇总.
- Sequence是按照接口请求顺序来汇总.
安装https证书
- 现在大多数接口都是https协议,如果不安装https证书,则不能抓包.
- 使用手机浏览器输入 http://charlesproxy.com/getssl 或者 chls.pro/ssl
- 需要在手机上设置密码才能安装
- 在Android个别rom上,通过手机浏览器下载后不让安装,需要通过电脑先下载https证书导入到设备上安装
- adb push charles-proxy-ssl-proxying-certificate.pem /sdcard
- 小米手机:设置---更多设置---系统安全---从存储设备安装--SDCard安装
- iOS大于等于10系统上,下载安装https后,证书默认是未开启的.
- 手动开启路径:设置->通用->关于本地->证书信任设置->勾选证书
- charles设置443端口,proxy->ssl proxy setting
基本使用
查看请求
使用本地数据(Map Local)
- 这个功能主要是拦截服务端数据,做本地修改.
- 复制响应结果中json到存储到本地文件中
- 在本地文件中修改内容
- 点击接口,选择Map Local
- Map To选择刚才修改过的json文件
- 不需要Map Local的时候,在Tools-Map Local中把这个接口关闭.
- Map Local最合适做客户端接口容错测试,本地json按照一定的修复规则,测试客户端不应该崩溃或者测试文案超长等情况
接口重定向(Map Rmote)
- 这个功能主要是把接口代理到其他环境上
- 在Map Rmote中写上要代理接口
实例
- 把详情页接口线上环境重定向到测试环境
- 其中body中有个参数是bid=3152,但是测试环境没有这个bid,所以接口查询不到数据
重写(Rewrite)
- 重写功能可以删除、修改、增加,head、body、url、response等参数
- 位置在Tools->Rewrite下,需要增加一个接口地址,增加一个重写规则
- 接着上实例,把bid=3152替换成1937,此时完成了一次body数据重写
断点
- 断点功能主要修改request和response内容,这个时候接口是在Charles代理层被拦截,还没有实际到手机设备上.
- 选择接口-勾选BreakPoints-再次请求接口
- 修改request中body参数-点击Execute-发送请求
- 修改response中status code参数-点击Execute
- 这个功能比较适合模拟接口500、超时,客户端接收response是有超时时间的,如果修改数据的时间太久,客户端会展示错误页面,那么做断点调试就没有意义了.
模拟发送请求
- 选择接口右键选择Compose
- 修改数据,点击Execute按钮发送请求
重发请求 (Repeat)
- 接口右键选择-Repeat Advanced,填写发送的次数,循环发送多次请求
- Iterations表示次数
- Concurrency表示并发线程数
模式弱网
- Proxy-Throttle Settings
- 勾选Enable Throttling
- Only for selected表示仅选择的域名做弱网
- Throttle preset表示要模拟的网速,可以改上行和下行带宽,还有丢包率
Android 7.0 https抓包实现
在实际工作中可能会遇到明明安装了https证书,但是抓https证书的包还是提示unkown.
具体原因是Android在高版本的sdk中安全信任机制,不会信任代理工具的证书,只会信任系统根证书.
具体解决办法,需要开发同学配合,修改代码中配置文件或者在网络库修改代码.
Android官方文档:https://developer.android.com/training/articles/security-config.html
结语
Charles功能很强大,熟悉掌握常用技巧,在工作中很方便mock数据、制造异常场景.