1、简介
通过将自己设置为系统的网络访问代理服务器,使得所有的网络访问都通过他来完成,从而实现了网络封包的截取和分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
Charles的功能:
①截取Http 和 Https网络封包。
②支持重发网络请求,方便后端调试。
③支持修改网络请求参数。
④支持网络请求的截获并动态修改。
⑤支持模拟慢速网络。
2、如何安装 Charles
百度云4.2版本
MAC破解:将Charles.app 拖到 应用程序 文件夹;复制charles.jar 到 /Applications/Charles.app/Contents/Java/
windows破解:msi程序安装后,charles.jar替换到Charles/lib目录下
3、将 Charles 设置成系统代理
这个是你抓包的前提,设置方法:Proxy---->Windows Proxy 点击勾选上即可
需要注意的是,Chrome和Firfox浏览器默认不使用系统代理,带来的问题是,你通过Chrome和Firfox浏览器发出去的请求,无法被Charles截取。解决办法,手动设置Chrome和Firfox的代理服务器为系统的代理服务器,或者直接将代理服务器地址设成127.0.0.1:8888。
为什么是8888?可不可以更改?全在Proxy---->Proxy Settings进行设置。
4、Charles 主界面介绍
Charles提供两种查看封包的视图:Structure和Sequence。
4.1 Structure ——将网络请求按照域名进行分类
对于某一个具体的网络请求,你可以查看其详细的请求内容和响应内容。如果请求内容是 POST 的表单,Charles 会自动帮你将表单进行分项显示。如果响应内容是 JSON 格式的,那么 Charles 可以自动帮你将 JSON 内容格式化,方便你查看。如果响应内容是图片,那么 Charles 可以显示出图片的预览。
4.2 Sequence——将网络请求按照时间进行排序
提供简单的Filter功能
5、过滤网络请求
三种方法:一种是Filter内填写需要过滤出来的关键字;另一种方法是Proxy---->Recording Settings ---->Include----->Add,填写具体内容进行过滤。
6、截取 iPhone 上的网络封包
Charles 通常用来截取本地上的网络封包,但是当我们需要时,我们也可以用来截取其它设备上的网络请求。下面我就以 iPhone 为例,讲解如何进行相应操作。
①Charles上的设置:
打开Charles的代理功能,具体操作 Proxy--->Proxy Settings ,填写端口默认就好,勾选Enable transparent HTTP proxying,完成Charles的代理功能。
②iPhone上的设置:
首先我们需要获取 Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”–>“Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图所示:
然后,设置iPhone的代理服务器,手机和Charles需要连接同一个无线,在手机上填写Charles的IP地址和端口。
设置好之后,打开需要联网的程序,Charles就会弹出一个窗口,iPhone 请求连接Charles的确认菜单,点击Allow就好。
7、截取 Https 通讯信息
①截取电脑端的Https信息:
安装证书: “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”。根据提示,一路点击下一步,最后提示“导入成功”。windows中win+R输入命令certmgr.msc,可以在中级证书颁发机构中--->证书查看安装的证书。
此时证书是不信任的,也就是会出现你用IE或者Chrome打开百度都会提示这不是一个私密连接或者证书不被信任,还需要一步把不信任变成信任。打开IE浏览器—>工具—>Internet选项—>内容—>证书—>把中级证书颁发机构中的charles证书导出来—>再把导出来的证书导入到受信任的根证书颁发机构中。就是先从中级证书颁发机构中找到你刚才安装的证书,将其导出(默认选择就好)再导入到受信任的根证书颁发机构中。当然这个导出导入也可以通过win+R输入命令certmgr.msc中完成。
还有一步,如果还不能获取https内容,那么右击--->选择SSL Proxying Enable。
②截取手机端的Https信息:
安装证书:如果我们需要在 iOS 或 Android 机器上截取 Https 协议的通讯内容,还需要在手机上安装相应的证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 弹出的简单的安装教程。如下图所示:
按照我们之前说的教程,在设备上设置好 Charles 为代理后,在手机浏览器中访问地址:chls.pro/ssl,即可打开证书安装的界面,安装完证书后,就可以截取手机上的 Https 通讯内容了。不过同样需要注意,默认情况下 Charles 并不做截取,你还需要在要截取的网络请求上右击,选择 SSL proxy 菜单项。
8、模拟慢速网络
在 Charles 的菜单上,选择 “Proxy”–>“Throttle Setting” 项,在之后弹出的对话框中,我们可以勾选上 “Enable Throttling”,并且可以设置 Throttle Preset 的类型。
9、修改网络请求内容
有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键,选择 “Edit”,即可创建一个可编辑的网络请求。
10、给服务器做压力测试
我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下:我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。
11、修改服务器返回内容
有些时候我们想让服务器返回一些指定的内容,方便我们调试一些特殊情况。例如列表页面为空的情况,数据异常的情况,部分耗时的网络请求超时的情况等。如果没有 Charles,要服务器配合构造相应的数据显得会比较麻烦。这个时候,使用 Charles 相关的功能就可以满足我们的需求。根据具体的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以达到修改服务器返回内容的目的。
三者在功能上的差异:
Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。
Rewrite 功能适合对网络请求进行一些正则替换。
Breakpoints 功能适合做一些临时性的修改。
Map功能:
Charles 的 Map 功能分 Map Remote 和 Map Local 两种,顾名思义,Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件。
Rewrite功能:
Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。
Breakpoints功能:
Breakpoints 功能类似我们在 Xcode 中设置的断点一样,当指定的网络请求发生时,Charles 会截获该请求,这个时候,我们可以在 Charles 中临时修改网络请求的返回内容。
12、总结
通过 Charles 软件,我们可以很方便地在日常开发中,截取和调试网络请求内容,分析封包协议以及模拟慢速网络。用好 Charles 可以极大的方便我们对于带有网络请求的 App 的开发和调试。