您的会话包含您录制的所有信息,它由 会话 窗口表示,默认情况下,当您启动Charles时会自动创建一个新会话。当您使用Charles时,您可能只需要一次会话。直到你觉得需要使用多个会话的时候,你可以打开多个互不影响的会话。
当您的会话中记录变满(或太忙)时,使用 File 菜单中的 Clear Session 选项或工具栏上的 扫把 图标可以清除记录事件。
使用 File 菜单中的 Save Session 选项,可以保存并重新打开会话,这在与同事交流的场景下非常有用。
记录是Charles的主要功能,请求和响应将记录到当前会话中,供您稍后检查和分析。记录的请求取决于Charles的配置,通常在默认配置下,这将包括来自浏览器的所有HTTP和HTTPS流量,以及计算机上的其他应用程序(如果您的操作系统代理设置也已更改)。但是,它也可能包括来自通用 套接字1 连接的数据,例如通过 SOCKS代理2 或端口转发。
使用 Proxy 菜单中的 Start Recording 或 Stop Recording 选项可以开始或停止记录。如果记录关闭,Charles会正常通过所有请求,但它们不会记录在会话中供您查看。还有工具栏上的 靶心 图标也可以快速开始或停止记录。
请求及其响应是Charles中记录的基本元素,HTTP/HTTPS由 请求 - 响应 对组成:从计算机到服务器的请求以及来自服务器的响应。对于通用套接字,请求 - 响应 由入站和出站流的全部内容组成。这对套接字来说并不总是那么有用,将来可能会有所改进。如果您需要进行大量的套接字级调试,可能需要考虑使用 Ethereal3 工具。
记录时,请求将显示在 会话 窗口中。查看 会话 窗口有两种不同的方式: 结构视图 和 序列视图 。
通过 结构视图 ,您可以查看由主机名组织的树中的请求,然后查看主机中的文件夹/目录。
序列视图 使您可以按顺序查看请求,单击请求时,会话 窗口中会加载请求查看器以显示详细信息。
您始终可以通过纯文本或二进制(十六进制和ascii)的形式查看HTTP请求和响应标头以及请求和响应主体,标头和正文的特殊查看器可以增强显示效果。
在导航器视图中右键单击请求可以获取其他选项,您可以复制或保存请求和响应正文。如果您选择多个请求,则可以一次保存所有请求。
你在记录请求时通常会有很多来自不同主机的请求和响应,使Charles会话变得混乱,使用 焦点 功能,您可以将您关注的主机与不关注的主机分开。
要激活主机的 焦点 ,请右键单击 结构视图 树中的主机名,然后从菜单中选择 Focus 项。现在结构树将在顶部显示新聚焦的主机,然后显示名为 Other Hosts 的文件夹,您可以展开该文件夹以查看其他所有主机。
在 序列视图 中,您可以勾选 Focused 复选框以仅显示序列中的聚焦主机。
要查看所有焦点主机并进行编辑,请转到 View 菜单中的 Focused Hosts… 项。
请求的 Chart 选项卡在 Timeline 图表上显示请求和任何相关请求。图表显示了请求何时开始,响应(下载)何时开始以及何时结束。此外,如果有相关请求,那么您可以看到它们彼此之间的关系。
如果您查看HTML页面,将显示相关请求,相关请求将是图像、Javascript、CSS和页面加载的其他文件。该图表对于可视化并行下载、阻塞和资源之间的依赖性非常有用。
图表上的每个条形图分为三个部分:
通过从 File 菜单中选择 Export Session… ,可以从Charles中的会话导出数据,Charles支持多种不同的导出格式:
Trace和XML格式也可用于导入。
CSV导出不包含所有会话信息,因此无法导入CSV,CSV只能导出包含有关请求和响应的时间以及大小的摘要数据。
这是Charles特有的纯文本文件格式,它的优点是易于读写,它特别设计用于轻松转储请求,因为它具有非常简单的语法。
XML文件格式用于与第三方软件交换会话记录。
Charles为站点生成自己的证书,它使用Charles根证书签名,该证书是为您安装Charles而特别生成的,当您收到该证书时,您将在浏览器或其他应用程序中看到警告,因为Charles根证书不在您的受信任根证书列表中。您可以选择在遇到它时永久信任每个站点的证书,在这种情况下,您不需要信任Charles根证书。如果您想自动信任Charles发出的每张证书,请继续往下阅读。
如果没有安装SSL证书,Charles记录下来的数据就会像上面图片那样显示乱码。以下内容适用于不同的浏览器和应用程序,以帮助您信任您的Charles根证书,以便您不再看到证书警告。
在Charles中,转到 Help 菜单,然后选择 SSL Proxying > Install Charles Root Certificate ,将出现一个窗口,警告您CA根证书不受信任。
单击 Install Certificate 按钮以启动证书导入向导,必须将证书导入 受信任的根证书颁发机构 证书存储区,因此请覆盖默认证书存储库选择。
完成向导,现在已安装Charles根证书,您可能需要在安装生效之前重新启动IE浏览器。
首先确保Firefox连接到Charles,您应该会在Charles中看到来自Firefox的浏览记录。
在Firefox中访问 https://chls.pro/ssl ,您将看到一个证书导入对话框。勾选 信任此CA以识别网站 选项并完成导入。
在Charles中,转到 Help 菜单,然后选择 SSL Proxying > Install Charles Root Certificate ,钥匙串访问将打开。找到 Charles Proxy… 条目,然后双击以获取相关信息,展开 信任 部分,在 使用此证书时 旁边,将其从 使用系统默认值 更改为 始终信任 ,然后关闭证书信息窗口,系统将提示您输入管理员密码以更新系统信任设置。
您可能需要退出并重新打开Safari浏览器以查看更改。
退出iOS模拟器,启动Charles并转到 Help 菜单。选择 SSL Proxying > Install Charles Root Certificate in iOS Simulators 项,这会将您的Charles根证书安装到您的所有iOS模拟器中,现在当您启动iOS模拟器时,您应该能够使用SSL代理访问大部分网站。
要更改tvOS上的代理设置,您必须使用App Store中的Apple Configurator 2。
将配置文件部署到Apple TV上,然后进入 设置 > 通用 > 关于 > 证书 ,并为 Charles Proxy CA 证书启用信任。
从Android N开始,您需要向应用添加配置,以使其信任Charles SSL代理生成的SSL证书,这意味着您只能对您控制的应用程序使用SSL代理,也就是说,你不能监控别人的应用程序。
要将您的应用配置为信任Charles,您需要向应用添加网络安全配置文件,此文件可以覆盖系统默认值,使您的应用程序可以信任用户安装的CA证书(例如Charles根证书)。您可以指定这仅适用于应用程序的开发、测试版本,以便生产版本使用默认信任配置文件。
将文件 res/xml/network_security_config.xml 添加到您的应用程序:
然后在应用的清单中添加对此文件的引用,如下所示:
...
在macOS上,请按照上面的macOS说明进行操作,这些说明仅适用于Windows系统,在Charles中,转到 Help 菜单并选择 SSL Proxying > Save Charles Root Certificate ,将根证书作为二进制证书(.cer)保存到桌面,或者在可以快速访问它的位置。
在Chrome浏览器中,打开 设置 ,在设置页面的底部,单击 高级 以打开高级部分,然后单击 管理证书… 按钮,转到 受信任的根证书颁发机构 选项卡,然后单击 导入… 。
找到您从上一步中在Charles保存的证书文件,然后单击 下一步 和 完成,保留默认选项,直到完成导入, Chrome现在始终信任Charles签署的证书。导入后,您可以删除保存的证书文件。
您可以将Charles根证书添加到Java中的根证书信任库,然后所有Java应用程序都将信任Charles发出的证书,请注意,每次升级Java安装时都可能需要执行此操作。
在Charles中,转到 Help 菜单并选择 SSL Proxying > Save Charles Root Certificate ,将根证书保存为Base 64编码证书(.pem)到桌面,或者在可以快速访问它的地方。
现在找到 cacerts文件 ,它应该在你的 $JAVA_HOME/jre/lib/security/cacerts 中,其中 $JAVA_HOME 是你正在使用的JVM的java主目录。
在Linux上,$JAVA_HOME 可能已经设置好了。在macOS上,如果未设置,请尝试运行 /usr/libexec/java_home 以获取JVM的位置。然后键入(替换 $JAVA_HOME 和证书的相应路径):
sudo keytool -import -alias charles -file ~/Desktop/charles-ssl-proxying-certificate.pem -keystore JAVA_HOME/jre/lib/security/cacerts -storepass changeit
温馨提示,changeit 是 cacerts文件 的默认密码。在Windows上,您可能需要以管理员身份从命令提示符运行上述操作,并删除行开头的 sudo 。然后尝试:
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
如果您有安装多个Java,则可能需要确定运行应用程序的用途,并在适当的位置执行此操作。或者在所有Java安装上执行此操作。在macOS上,Java插件的 cacerts文件 位于 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security 。如果希望在浏览器中运行的Java程序信任Charles,则应将Charles根证书添加到该 cacerts 文件中。
当您尝试在Charles中使用SSL代理时,Python的请求模块将失败并显示错误:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate
verify failed (_ssl.c:590)
您可以配置信任Charles根证书的请求,首先使用 Help > SSL Proxying > Save Charles Root Certificate 菜单将证书另存为.pem文件,然后按如下方式配置会话:
from requests import Session
session = Session()
session.verify = "charles-ssl-proxying-certificate.pem"
Charles具有基本的负载测试能力,为了负载测试,首先在Charles中启动一个新会话,并记录浏览网站的浏览器会话。您可以在网站上填写表单并执行任何其他任务,只要它们是可重现、可反复执行的。进行此录制后,建议你保存会话,以便您可以再次使用它。
从结构视图 的树(或其他节点)中选择站点节点,右键单击并选择 Repeat Advanced ,然后,您可以指定负载测试的一些特性,包括重复每个请求的次数以及并发级别(访问该站点的用户数量),以及迭代次数,选择 Show results in new Session 以在新会话中显示结果。
上面的操作将在Charles中打开一个新会话,该会话将仅显示负载测试的请求,然后,您可以单击各种节点(包括站点节点),并使用 Overview 、Summary 和 Chart 视图查看结果。
Charles有一个Web界面,可以让您从浏览器控制Charles,或使用Web界面作为Web服务使用外部程序。使用 Proxy 菜单中的 Web Interface Settings… 选项启用Web界面,您可以允许匿名访问,也可以配置用户名和密码。
您可以通过已配置成使用Charles作为其代理的Web浏览器中访问 http://control.charles/ 来访问Web界面。
Web界面提供对以下功能的访问:
通过检查Web界面的HTML代码,您可以推导出如何将其用作Web服务来自动化Charles。
Charles支持许多命令行选项:
套接字百度百科 ↩︎
Socks代理百度百科 ↩︎
Ethereal代理百度百科 ↩︎
AMF百度百科 ↩︎
TRACE百度百科 ↩︎
无头模式,没有提供GUI的纯命令行模式 ↩︎