Leo's Blog

Charles

简介

Charles 是在 Mac 下常用的网络抓包工具,在开发过程中与服务端调式接口的必备利器。

Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。

Charles 主要的功能包括:

  • 截取 Http 和 Https 网络封包。
  • 支持重发网络请求,方便后端调试。
  • 支持修改网络请求参数。
  • 支持网络请求的截获并动态修改。
  • 支持模拟慢速网络。

安装

下载地址

破解

Charles 是一个收费软件,在天朝,看到收费两个字,呵呵之~

破解jar生成

点我,点我

屏幕快照 2017-12-19 15.07.44.png-91.4kB

替换jar包

macOS: /Applications/Charles.app/Contents/Java/charles.jar

Windows: C:\Program Files\Charles\lib\charles.jar

配置代理

浏览器

屏幕快照 2017-12-19 15.58.26.png-368.3kB

选择菜单中的 “Proxy” -> “macOS Proxy” 将 charles 设置为系统代理(需要授权),然后我们就可以在Charles界面看到网络请求。Windows系统类似

iOS Device

iOS 设备我们需要手动的设置 Http 代理

设置 -> 无线 -> 已连接WIFI -> 配置代理 -> 手动

屏幕快照 2017-12-19 16.38.30.png-153.7kB

服务器地址为 运行charles的电脑 ip 地址,端口默认为 8888

Android

  • 配置手机 wifi 网络代理

设置 -> 无线网络 -> WIFI -> 长按 -> 修改网络 -> 显示高级选项 -> 代理 -> 手动

Screenshot_20171219-233621.png-73.1kB

部分手机被隐藏,可以通过语音助手唤起 “”proxy””

  • 硬编码
1
2
HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);

or

1
HttpUrlConnection conn = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.0.101", 8888)));

Charles 使用

屏幕快照 2017-12-19 23.46.08.png-435.8kB

视图介绍

  • Structure : 视图将网络请求按访问的域名分类。

  • Sequence : 视图将网络请求按访问的时间排序。

过滤请求

  • Sequence 视图,在 Filter 栏中输入关键字
    用于临时过滤的场景

  • Recording Setting -> include
    用于固定过滤,比如过滤 jinhui365.com
    屏幕快照 2017-12-20 00.07.04.png-404.1kB

  • Focus 过滤

  1. Structure 视图 : 网络请求右击,选择”Focus”,仅展示过滤的请求,其他请求放入 “Other Hosts” 目录。
  2. Sequence 视图 : 网络请求右击,选择”Focus”,并且勾选Filter栏右侧checkbox,仅展示过滤的请求

屏幕快照 2017-12-20 10.55.51.png-62.1kB 屏幕快照 2017-12-20 10.58.52.png-146.4kB

Https请求

成功的抓到了网络请求,却发现有很多的红✘✘,强迫症郁闷了。。。
屏幕快照 2017-12-20 11.31.59.png-186.6kB

查看发现,出现红✘的请求全部是 https 协议,想要分析该请求,需要安装 Charles 的 CA 证书。

  • Mac 证书安装
  1. 安装证书
    “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”
    屏幕快照 2017-12-20 17.35.08.png-239kB
  2. 证书配置
    step完成后,在弹出的钥匙串对话框中,双击 charles 证书,将其设置为始终信任
    屏幕快照 2017-12-20 17.38.24.png-231.8kB
  • 移动设备证书安装
  1. 移动设备设置 Http 代理
    屏幕快照 2017-12-20 17.50.47.png-27.4kB
  2. 手机浏览器访问 chls.pro/ssl 下载并安装证书

Screenshot_20171220-180049.png-47.4kB

  • 开启 SSL Proxying
  1. 右键网络请求,点击 Enable SSL Proxying 菜单项

  2. Proxy - > SSL Proxying Setting -> 勾选 Enable SSL Proxying -> 添加域名
    屏幕快照 2017-12-20 18.33.43.png-152.8kB

  • Https 抓包

屏幕快照 2017-12-20 18.30.40.png-90kB

网速模拟

在我们移动开发或测试工作中,常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。

在 Charles 菜单, 选择 Proxy -> Throttle Setting ,勾选 Enable Throttling

屏幕快照 2017-12-20 19.11.32.png-139.4kB

如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项。

修改/重发 Request

Charles 提供了网络请求的修改和重发功能,接口调试更方便,有么有。。。

  • 修改 Request

右键网络请求 -> 菜单项 -> Compose

屏幕快照 2017-12-20 19.25.17.png-134.6kB

屏幕快照 2017-12-20 19.26.02.png-70.2kB

我们可以修改请求的任何信息,Url地址、参数、端口、Header 等等,点击 Execute 执行网络请求

  • 重发 Request

右键网络请求 -> 菜单项 -> Repeat/Repeat Advanced

Repeat 仅重试一次,Repeat Advanced 可以设置 重试次数,线程数量,重试间隔等等,可以做简单的服务器压力测试

屏幕快照 2017-12-20 19.36.39.png-33.2kB

修改 Response

作为移动开发,经常需要服务器返回一些特殊的内容,方便我们调式一些情况,比如数据为空,数据异常,请求超时等等。又是一个很实用的功能,有木有。。

Charles 提供了Map,Rewrite及Breakpoints三种方式修改Response

  • Map: 适合长期将某一些请求重定向到另一个 Url 或者本地文件

  • Rewrite : 适合对网络请求进行一些正则替换

  • Breakpoints : 适合一些临时性的修改

Map

  • Map Remote : 将指定网络请求重定向到另一个网络地址 ,Tools -> Map Remote

屏幕快照 2017-12-21 10.42.20.png-141.2kB

  • Map Local : 将指定网络请求重定向到本地文件 ,Tools -> Map Local

屏幕快照 2017-12-21 11.19.45.png-105.1kB

Rewrite

Rewrite 功能适合某一个请求进行一些正则替换。Tools -> Rewrite

屏幕快照 2017-12-21 11.49.15.png-245.2kB

举个例子:将我们的资产接口中访问 “高端理财”替换为”超级理财”,再也不需要张普同学跑回工位改代码了。。。

屏幕快照 2017-12-21 11.58.19.png-42.7kB

Breakpoints

Rewrite 功能适合做批量和固定的替换,很多时候我们只是修改一次请求的Response,Rewrite 就感觉有些繁琐了。

Breakpoints 功能类似我们开发过程中的断点,当指定的网络请求发生,Charles 截取到该请求但并未返回结果,这时我们可以修改网络请求的返回内容。

  • 添加断点
    双击请求 -> 勾选 Breakpoints
    屏幕快照 2017-12-21 12.52.00.png-219.2kB

  • 断点设置
    Proxy -> Breakpoints Setting
    屏幕快照 2017-12-21 12.49.37.png-241.9kB

  • 修改请求内容

  1. 完成了前面两步操作,再次发起接口请求,会弹出断点对话框
  2. 点击 Edit Response ,修改Body
  3. 点击 Execute ,将Body返回
    屏幕快照 2017-12-21 13.02.25.png-99.8kB

Tip:使用 Breakpoints 功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时。

总结

通过 Charles 软件,我们可以很方便地在日常开发中,截取和调试网络请求内容,分析封包协议以及模拟慢速网络。用好 Charles 可以极大的方便我们对于带有网络请求的 App 的开发和调试。