charles:常用场景
1、定位分析问题 (线上bug排查)
2、明确bug的归属 (抓包定位)
3、补偿IDE无法覆盖的场景 例如前端调用客户端sdk请求接口服务端请求接口(参数)
4、模拟慢网络处理
背景
Charles是在PC端常用的网络封包截取工具,在做移动端开发 ,我们为了调试与服务端的网络通讯协议,需要截取网络封包来分析,Charlse也可以用于分析第三方应用的通讯协议,配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
一、原理
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。(Charles 是一个 HTTP 和 SOCKS 代理服务器。代理请求和响应使 Charles 能够在请求从客户端传递到服务器时检查和更改请求,以及从服务器传递到客户端时的响应。)
二、下载&安装
1、官网下载: www.charlesproxy.com/download/
2、charles证书下载(web)
2.1 为什么下载charles的ssl证书 如果没有证书,charles就不能解析https的接口,而且请求和响应都是乱码格式,所以要下载ssl证书,来获取数据
2.2 点击help,选中ssl Proxying,点击Install Charles Root Certificate
2.3 信任证书
2.4 proxy Settings 设置端口号,允许传输http带,点击proxy,选中proxy Settings
2.5 ssl proxyig settings,运行代理
3、手机charles证书安装
3.1 手机与charles连接 点击help,选中ssl Proxying 选择 install charles root certificate on a mobile device or remote browser
在手机端进入wifi设置,长按当前连接的网络,选择修改网络-显示高级选项-设置代理为手动-服务器主机名填入charles上弹出的地址,服务器端口8888.
手机连上charles以后,charles会弹出一个提示,询问是否允许设备连接,一定要同意。 如果不小心点了deny,可以重启charles重新设置手机与之连接。
手机上未安装charles证书,手机网络会显示已连接不可用。 3.2 收集下载并安装charles证书
使用手机浏览器访问 charlesproxy.com/getssl ,按提示下载证书后,进入手机设置页面,搜索“从存储设备安装”,选择刚下载的证书。按提示给证书取个名字,安装成功。
如果此时手机还显示无法连接网络,可以重连一下wifi。
三、Charles主要的功能
1.截取Http和Https网络封包。
2.支持重发网络请求,方便后端调试。
3.支持修改网络请求参数
4.支持网络请求的截获并动态修改。
5.支持模拟慢速网络。
四、Charles 主界面介绍
Charles:主界面视图如下图所示:
主界面视图
Charles 主要提供两种查看封包的视图,分别名为 Structure 和 Sequence。
Structure: 此视图将网络请求按访问的域名分类。
Sequence: 此视图将网络请求按访问的时间排序。
使用时可以根据具体的需要在这两种视图之前来回切换。请求多了有些时候会看不过来,Sequence 提供了一个简单的 Filter 功能,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求。
对于某一个具体的网络请求,你可以查看其详细的请求内容和响应内容。如果请求内容是 POST 的表单,Charles 会自动帮你将表单进行分项显示。如果响应内容是 JSON 格式的,那么 Charles 可以自动帮你将 JSON 内容格式化,方便你查看。如果响应内容是图片,那么 Charles 可以显示出图片的预览。
工具导航栏:
Charles 顶部为菜单导航栏,菜单导航栏下面为工具导航栏。视图如下图所示:
工具导航栏中提供了几种常用工具:
Charles 菜单介绍
Charles 的主菜单包括:File、Edit、View、Proxy、Tools、Window、Help。
下面主要介绍 Charles 提供的一些代理功能。Proxy 菜单的视图如下图所示:
Proxy 菜单包含以下功能:
Start/Stop Recording:开始/停止记录会话。
Start/Stop Throttling:开始/停止节流。
Enable/Disable Breakpoints:开启/关闭断点模式。
Recording Settings:记录会话设置。
Throttle Settings:节流设置。
Breakpoint Settings:断点设置。
Reverse Proxies Settings:反向代理设置。
Port Forwarding Settings:端口转发。
Windows Proxy:记录计算机上的所有请求。
Proxy Settings:代理设置。
SSL Proxying Settings:SSL 代理设置。
Access Control Settings:访问控制设置。
External Proxy Settings:外部代理设置。
Web Interface Settings:Web 界面设置。
Recording Settings(记录会话设置)
Recording Settings 和 Start/Stop Recording 配合使用,在 Start Recording 的状态下,可以通过 Recording Settings 配置 Charles 的会话记录行为。Recording Settings 的视图如下图所示:
Recording Settings 有 Options、Include、Exclude 三个选项卡:
Options:通过 Recording Size Limits 限制记录数据的大小。当 Charles 记录时,请求、响应头和响应体存储在内存中,或写入磁盘上的临时文件。有时,内存中的数据量可能会变得太多,Charles 会通知您并停止录制。在这种情况下,您应该清除 Charles 会话以释放内存,然后再次开始录制。在录制设置中,您可以限制 Charles 将记录的最大大小; 这根本不会影响你的浏览,Charles 仅会停止录制。
Include:只有与配置的地址匹配的请求才会被录制。
Exclude:只有与配置的地址匹配的请求将不会被录制。
Include 和 Exclude 选项卡的操作相同,选择 Add,然后填入需要监控的Procotol、Host 和 Port等信息,这样就达到了过滤的目的。如下图所示:
Throttle Settings(节流设置 - 慢网络)
Recording Settings 和 Start/Stop Recording 配合使用,在 Start Recording 的状态下,可以通过 Recording Settings 配置 Charles 的会话记录行为。Recording Settings 的视图如下图所示:
Throttle Settings 视图中的选项含义如下:
Bandwidth:带宽
Utilistation:利用百分比
Round-trip:往返延迟
MTU:字节
Breakpoint Settings(断点设置)
Breakpoint Settings 和 Enable/Disable Breakpoints 配合使用,在 Enable Breakpoints 的状态下,可以通过 Breakpoint Settings 配置 Charles 的断点模式。Breakpoint Settings 的视图如下图所示:
勾选 Enable Breakpoints 启用断点模式,选择 Add,然后填入需要监控的Scheme、Procotol、Host 和 Port 等信息,这样就达到了设置断点的目的。然后可以来观察或者修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。或者可以在某个想要设置断点的请求网址上右击选择 Breakpoints 来设置断点。
Reverse Proxies Settings(反向代理设置)
反向代理在本地端口上创建 Web 服务器,该端口透明地将请求代理给远程 Web 服务器。反向代理上的所有请求和响应都可以记录在 Charles 中。
如果您的客户端应用程序不支持使用 HTTP 代理,或者您希望避免将其配置为使用代理,那么反向代理很有用。创建原始目标 Web 服务器的反向代理,然后将客户端应用程序连接到本地端口; 反向代理对客户端应用程序是透明的,使您可以查看 Charles 以前可能无法访问的流量。
Port Forwarding Settings(端口转发)
可以将任何 TCP/IP 或 UDP 端口配置为使用 Port Forwarding 工具从 Charles 转发到远程主机。这样可以调试 Charles 中的任何协议。
在 Macromedia Flash 中调试 XMLSocket 连接时,这尤其有用。
还可以使用 Charles 作为 SOCKS 代理,因此无需设置端口转发。
macOS Proxy / Windows Proxy (记录计算机上的所有请求)
如果想要抓取电脑端的请求,勾选 Windows Proxy 选项即可;如果只需要抓取手机请求,则取消勾选这个选项。
Proxy Settings(代理设置)
Proxy Settings 的视图如下图所示:
代理端口默认为 8888(可以修改),并且勾上 Enable transparent HTTP proxying 就完成了在 Charles 上的代理设置。
SSL Proxy Settings(SSL 代理设置)
SSL Proxy Settings 的视图如下图所示:
勾上 Enable SSL proxying 就完成了在 Charles 上的 SSL 代理设置。之后也可以选择 Add,然后填入需要监控的 Host 和 Port 信息,这样就达到了针对某个域名启用 SSL 代理的目的。
Access Control Settings(访问控制设置)
Access Control Settings 表示访问控制设置。访问控制列表确定谁可以使用此 Charles 实例。通常,您在自己的计算机上运行 Charles,并且您只打算自己使用它,因此 localhost 始终包含在访问控制列表中。也可以选择 Add,然后填入允许访问的 IP,这样就达到了允许某个 IP 访问 Charles 的目的。
Web Interface Settings(Web 界面设置)
Web Interface Settings 表示 Web 界面设置。Charles 有一个 Web 界面,可以让您从浏览器控制 Charles,或使用 Web 界面作为 Web 服务使用外部程序。
Tools 菜单
面主要介绍 Charles 提供的一些实用工具。Tools 菜单的视图如下图所示:
Tools 菜单包含以下功能:
No Caching Settings:禁用缓存设置。
Block Cookies Settings:禁用 Cookie设置。
Map Remote Settings:远程映射设置。
Map Local Settings:本地映射设置。
Rewrite Settings:重写设置。
Black List Settings:黑名单设置。
White List Settings:白名单设置。
DNS Spoofing Settings:DNS 欺骗设置。
Mirror Settings:镜像设置。
Auto Save Settings:自动保存设置。
Client Process Settings:客户端进程设置。
Compose:编辑修改。
Repeat:重复发包。
Repeat Advanced:高级重复发包。
Validate:验证。
Publish Gist:发布要点。
Import/Export Settings:导入/导出设置。
Profiles:配置文件。
Publish Gist Settings:发布要点设置。
No Caching Settings(禁用缓存)
No Caching 工具可防止客户端应用程序(如 Web 浏览器)缓存任何资源。因此,始终向远程网站发出请求,您始终可以看到最新版本。
适用范围
该工具可以作用于每个请求(选中 Enable No Caching 即可),也可以仅对你配置的请求启用(启用 No Caching 的同时,请选中 Only for selected locations)。当用于选定的请求时,可以使用简单但功能强大的模式匹配将工具的效果限制为指定的主机和路径。
工作原理
No Caching 工具通过操纵控制响应缓存的 HTTP 请求头来防止缓存。从请求中删除 If-Modified-Since 和 If-None-Match 请求头,添加 Pragma:no-cache 和 Cache-control:no-cache。从响应中删除 Expires,Last-Modified 和ETag 请求头,添加 Expires:0 和 Cache-Control:no-cache。
Block Cookies Settings(禁用 Cookie)
Block Cookies 工具阻止了 Cookie 的发送和接收。它可用于测试网站,就像在浏览器中禁用了 Cookie 一样。 请注意,网络爬虫(例如 Google)通常不支持 Cookie,因此该工具还可用于模拟网络爬虫网站的视图。
适用范围
该工具可以作用于每个请求(选中 Enable Block Cookies 即可),也可以仅对你配置的请求启用(启用 Block Cookies 的同时,请选中 Only for selected locations)。当用于选定的请求时,可以使用简单但功能强大的模式匹配将工具的效果限制为指定的主机和路径。
工作原理
Block Cookies 工具通过操纵控制响应 Cookies 的 HTTP 请求头来禁用 Cookies。从请求中移除 Cookie 请求头,防止 Cookie 值从客户端应用程序(例如 Web 浏览器)发送到远程服务器。从响应中删除 Set-Cookie 请求头,防止请求设置客户端应用程序从远程服务器接收的 Cookie。
Map Remote Settings(远程映射)
Map Remote 工具根据配置的映射更改请求站点,以便从新站点透明地提供响应,就好像这是原始请求一样。
通过此映射,您可以从另一个站点提供全部或部分站点。例如:
可以把 xk72.com/charles/ 映射到 localhost/charlesdev/ 来为 xk72.com 提供一个子目录;
可以把 xk72.com/*.php 这种指定后缀的所有文件映射到 localhost/charlesdev/。
映射类型
可以将目录映射到目录,如 xk72.com/charles/ 映射到 localhost/charlesdev/;
可以将文件映射到文件,如 xk72.com/charles/dow… 映射到 abc.com/testing/tes…
可以将带有文件模式的目录映射到目录,如 xk72.com/charles/*.p… 到 localhost/charlesdev/;
如果在目标映射中未指定路径,则 URL 的路径部分将不会更改。如果要映射到根目录,请在目标路径字段中已 / 结尾。
HTTPS
Map Remote 工具可以将 HTTP 请求映射到 HTTPS 目标,反之亦然,因此您可以将 HTTP 或 HTTPS 站点映射到其对立面
Map Local Settings(本地映射)
Map Local 工具使您可以使用本地文件,就像它们是远程网站的一部分一样。您可以在本地开发文件,并像在线上一样测试它们。本地文件的内容将返回给客户端,就像它是正常的远程响应一样。
Map Local 可以大大加快开发和测试速度,否则您必须将文件上传到网站以测试结果。使用 Map Local,您可以在开发环境中安全地进行测试。
动态文件
动态文件(例如包含服务器端脚本的文件)不会由 Map Local 执行,因此如果文件中有任何脚本,脚本将按原样返回到浏览器,这可能不是预期的结果。如果您想使用动态文件,就好像它们是远程网站的一部分一样,请参阅 Map Remote 工具。
工作原理
当请求与 Map Local 映射匹配时,它会检查与路径匹配的本地文件。它不包括查询字符串(如果有)。如果在本地找到所请求的文件,则将其作为响应返回,就好像它是从远程站点加载的一样,因此它对客户端是透明的。如果在本地找不到所请求的文件,那么该请求会像平常一样由网站提供,返回由真正的服务器提供的数据。
站点匹配
每个站点匹配可能包含协议、主机、端口和路径模式,以匹配特定的 URL。站点可能包括通配符。当您向此工具添加新站点时,可能会找到有关创建站点匹配的更多帮助。
Rewrite Settings(重写)
Rewrite 工具允许创建请求和响应在通过 Charles 时修改他们的规则。如:添加或更改头信息、搜索和替换响应内容中的某些文本等。
重写集
重写集可以单独激活和停用。每个集合包含站点和规则的列表。这些站点选择规则将要运行的请求和响应。
重写规则
每个规则都描述了一次重写操作。规则可能会影响请求URL的 Header,正文或部分内容;它可以根据请求或响应来操作;它可以定义搜索、替换或者仅替换样式重写。
站点匹配
每个站点匹配可能包含协议、主机、端口和路径模式,以匹配特定的 URL。站点可能包括通配符。当您向此工具添加新站点时,可能会找到有关创建站点匹配的更多帮助。
调试
当重写操作未按预期工作时,重写工具可能难以调试。如果您遇到问题,请尝试添加一个非常基本的规则,例如添加明显头信息的规则,以便您可以查看规则是否与请求完全匹配。同时打开错误日志中的调试,以获取从 Charles 中的 Window 菜单访问的错误日志中打印的一些调试信息。