Charles的使用方法

Charles的使用方法

会话

您的会话包含您录制的所有信息,它由 会话 窗口表示,默认情况下,当您启动Charles时会自动创建一个新会话。当您使用Charles时,您可能只需要一次会话。直到你觉得需要使用多个会话的时候,你可以打开多个互不影响的会话。

当您的会话中记录变满(或太忙)时,使用 File 菜单中的 Clear Session 选项或工具栏上的 扫把 图标可以清除记录事件。

多个互不影响的会话

使用 File 菜单中的 Save Session 选项,可以保存并重新打开会话,这在与同事交流的场景下非常有用。

记录

记录是Charles的主要功能,请求和响应将记录到当前会话中,供您稍后检查和分析。记录的请求取决于Charles的配置,通常在默认配置下,这将包括来自浏览器的所有HTTP和HTTPS流量,以及计算机上的其他应用程序(如果您的操作系统代理设置也已更改)。但是,它也可能包括来自通用 套接字1 连接的数据,例如通过 SOCKS代理2 或端口转发。

工具栏上的靶心图标

使用 Proxy 菜单中的 Start RecordingStop Recording 选项可以开始或停止记录。如果记录关闭,Charles会正常通过所有请求,但它们不会记录在会话中供您查看。还有工具栏上的 靶心 图标也可以快速开始或停止记录。

请求和响应

请求及其响应是Charles中记录的基本元素,HTTP/HTTPS由 请求 - 响应 对组成:从计算机到服务器的请求以及来自服务器的响应。对于通用套接字,请求 - 响应 由入站和出站流的全部内容组成。这对套接字来说并不总是那么有用,将来可能会有所改进。如果您需要进行大量的套接字级调试,可能需要考虑使用 Ethereal3 工具。

查看请求

记录时,请求将显示在 会话 窗口中。查看 会话 窗口有两种不同的方式: 结构视图序列视图

通过 结构视图 ,您可以查看由主机名组织的树中的请求,然后查看主机中的文件夹/目录。

结构视图

序列视图 使您可以按顺序查看请求,单击请求时,会话 窗口中会加载请求查看器以显示详细信息。

序列视图

您始终可以通过纯文本或二进制(十六进制和ascii)的形式查看HTTP请求和响应标头以及请求和响应主体,标头和正文的特殊查看器可以增强显示效果。

标头和正文的特殊查看器

标头查看器
  • 查询参数
  • 表格参数
  • Cookies
  • 认证
  • JSON标头
正文查看器
  • XML作为树或格式化文本
  • AMF4
  • 表格参数(包括多部分表格)
  • JSON
  • 压缩数据 - 用于查看原始压缩体

保存请求和响应

在导航器视图中右键单击请求可以获取其他选项,您可以复制或保存请求和响应正文。如果您选择多个请求,则可以一次保存所有请求。

导航器视图中右键单击

焦点

你在记录请求时通常会有很多来自不同主机的请求和响应,使Charles会话变得混乱,使用 焦点 功能,您可以将您关注的主机与不关注的主机分开。

要激活主机的 焦点 ,请右键单击 结构视图 树中的主机名,然后从菜单中选择 Focus 项。现在结构树将在顶部显示新聚焦的主机,然后显示名为 Other Hosts 的文件夹,您可以展开该文件夹以查看其他所有主机。

顶部显示新聚焦的主机

序列视图 中,您可以勾选 Focused 复选框以仅显示序列中的聚焦主机。

仅显示序列中的聚焦主机

要查看所有焦点主机并进行编辑,请转到 View 菜单中的 Focused Hosts… 项。

查看所有焦点主机并进行编辑

图表

请求的 Chart 选项卡在 Timeline 图表上显示请求和任何相关请求。图表显示了请求何时开始,响应(下载)何时开始以及何时结束。此外,如果有相关请求,那么您可以看到它们彼此之间的关系。

Chart选项卡在Timeline图表

如果您查看HTML页面,将显示相关请求,相关请求将是图像、Javascript、CSS和页面加载的其他文件。该图表对于可视化并行下载、阻塞和资源之间的依赖性非常有用。

图表上的每个条形图分为三个部分:

  • 请求 - 发送(上传)请求所花费的时间(深蓝色)
  • 延迟 - 等待服务器上的网络延迟或处理时间所花费的时间(中间蓝色)
  • 响应 - 接收(下载)响应所花费的时间(浅蓝色)

输出

通过从 File 菜单中选择 Export Session… ,可以从Charles中的会话导出数据,Charles支持多种不同的导出格式:

  • CSV
  • Trace5 文本文件
  • XML

Trace和XML格式也可用于导入。

CSV格式

CSV导出不包含所有会话信息,因此无法导入CSV,CSV只能导出包含有关请求和响应的时间以及大小的摘要数据。

Trace文件格式

这是Charles特有的纯文本文件格式,它的优点是易于读写,它特别设计用于轻松转储请求,因为它具有非常简单的语法。

XML文件格式

XML文件格式用于与第三方软件交换会话记录。

SSL证书

Charles为站点生成自己的证书,它使用Charles根证书签名,该证书是为您安装Charles而特别生成的,当您收到该证书时,您将在浏览器或其他应用程序中看到警告,因为Charles根证书不在您的受信任根证书列表中。您可以选择在遇到它时永久信任每个站点的证书,在这种情况下,您不需要信任Charles根证书。如果您想自动信任Charles发出的每张证书,请继续往下阅读。

在这里插入图片描述

如果没有安装SSL证书,Charles记录下来的数据就会像上面图片那样显示乱码。以下内容适用于不同的浏览器和应用程序,以帮助您信任您的Charles根证书,以便您不再看到证书警告。

Windows / IE浏览器

在Charles中,转到 Help 菜单,然后选择 SSL Proxying > Install Charles Root Certificate ,将出现一个窗口,警告您CA根证书不受信任。

单击 Install Certificate 按钮以启动证书导入向导,必须将证书导入 受信任的根证书颁发机构 证书存储区,因此请覆盖默认证书存储库选择。

完成向导,现在已安装Charles根证书,您可能需要在安装生效之前重新启动IE浏览器。

Firefox浏览器

首先确保Firefox连接到Charles,您应该会在Charles中看到来自Firefox的浏览记录。

在Firefox中访问 https://chls.pro/ssl ,您将看到一个证书导入对话框。勾选 信任此CA以识别网站 选项并完成导入。

macOS

在Charles中,转到 Help 菜单,然后选择 SSL Proxying > Install Charles Root Certificate ,钥匙串访问将打开。找到 Charles Proxy… 条目,然后双击以获取相关信息,展开 信任 部分,在 使用此证书时 旁边,将其从 使用系统默认值 更改为 始终信任 ,然后关闭证书信息窗口,系统将提示您输入管理员密码以更新系统信任设置。

钥匙串访问将打开

您可能需要退出并重新打开Safari浏览器以查看更改。

iOS设备

  • 将您的iOS设备在 设置 > 无线局域网 中使用Charles的IP地址作为其HTTP代理。
  • 打开Safari浏览器并浏览到 https://chls.pro/ssl ,Safari浏览器将提示您安装SSL证书。
  • 如果您使用的是iOS 10.3或更高版本,请打开 设置 > 通用 > 关于本机 > 证书信任设置 ,然后找到 Charles Proxy CA 证书,并将其打开以启用它的完全信任。
  • 现在,您应该能够使用SSL代理访问大部分的SSL网站。

iOS模拟器

退出iOS模拟器,启动Charles并转到 Help 菜单。选择 SSL Proxying > Install Charles Root Certificate in iOS Simulators 项,这会将您的Charles根证书安装到您的所有iOS模拟器中,现在当您启动iOS模拟器时,您应该能够使用SSL代理访问大部分网站。

tvOS

要更改tvOS上的代理设置,您必须使用App Store中的Apple Configurator 2

  • 创建新的配置文件
  • 添加全局HTTP代理有效内容
    • 代理类型:手动
    • 填写代理服务器和端口以指向桌面计算机上的Charles,无需用户名或密码。
  • 在证书有效负载中添加Charles根证书:
    • 在Charles中,从 Help > SSL Proxying 菜单选择 Save Charles Root Certificate… ,从文件类型下拉列表中选择 .cer 格式。
    • 在Apple Configurator 2中,使用该文件添加证书有效内容。

将配置文件部署到Apple TV上,然后进入 设置 > 通用 > 关于 > 证书 ,并为 Charles Proxy CA 证书启用信任。

Android

从Android N开始,您需要向应用添加配置,以使其信任Charles SSL代理生成的SSL证书,这意味着您只能对您控制的应用程序使用SSL代理,也就是说,你不能监控别人的应用程序。

要将您的应用配置为信任Charles,您需要向应用添加网络安全配置文件,此文件可以覆盖系统默认值,使您的应用程序可以信任用户安装的CA证书(例如Charles根证书)。您可以指定这仅适用于应用程序的开发、测试版本,以便生产版本使用默认信任配置文件。

将文件 res/xml/network_security_config.xml 添加到您的应用程序:

<network-security-config> 
  <debug-overrides> 
    <trust-anchors> 
      <!-- Trust user added CAs while debuggable only -->
      <certificates src="user" /> 
    </trust-anchors> 
  </debug-overrides> 
</network-security-config>

然后在应用的清单中添加对此文件的引用,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config" ... >
        ...
    </application>
</manifest>

Chrome浏览器

在macOS上,请按照上面的macOS说明进行操作,这些说明仅适用于Windows系统,在Charles中,转到 Help 菜单并选择 SSL Proxying > Save Charles Root Certificate ,将根证书作为二进制证书(.cer)保存到桌面,或者在可以快速访问它的位置。

在Chrome浏览器中,打开 设置 ,在设置页面的底部,单击 高级 以打开高级部分,然后单击 管理证书… 按钮,转到 受信任的根证书颁发机构 选项卡,然后单击 导入…

找到您从上一步中在Charles保存的证书文件,然后单击 下一步完成,保留默认选项,直到完成导入, Chrome现在始终信任Charles签署的证书。导入后,您可以删除保存的证书文件。

Java应用程序

您可以将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 文件中。

Python

当您尝试在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

结构视图 的树(或其他节点)中选择站点节点,右键单击并选择 Repeat Advanced ,然后,您可以指定负载测试的一些特性,包括重复每个请求的次数以及并发级别(访问该站点的用户数量),以及迭代次数,选择 Show results in new Session 以在新会话中显示结果。

Repeat Advanced高级重复

上面的操作将在Charles中打开一个新会话,该会话将仅显示负载测试的请求,然后,您可以单击各种节点(包括站点节点),并使用 OverviewSummaryChart 视图查看结果。

Web界面

Charles有一个Web界面,可以让您从浏览器控制Charles,或使用Web界面作为Web服务使用外部程序。使用 Proxy 菜单中的 Web Interface Settings… 选项启用Web界面,您可以允许匿名访问,也可以配置用户名和密码。

启动CharlesWeb界面

您可以通过已配置成使用Charles作为其代理的Web浏览器中访问 http://control.charles/ 来访问Web界面。

CharlesWeb界面

Web界面提供对以下功能的访问:

  • 流量控制( Throttling
    • 激活或停用所有已配置的限制预设
      节流控制
  • 记录控制( Recording
    • 开始和停止会话录制
      在这里插入图片描述
  • 工具( 记录控制
    • 激活和停用工具
      工具
  • 会话控制( Session
    • 清除当前会话
    • 以所有支持的格式导出当前会话
    • 以Charles的本机会话格式下载当前会话
      在这里插入图片描述
  • 退出Charles( Quit
    退出Charles

通过检查Web界面的HTML代码,您可以推导出如何将其用作Web服务来自动化Charles。

命令行选项

Charles支持许多命令行选项:

  • <path>
    • 以Charles会话的形式打开给定文件。
  • -config <path>
    • 指定要使用的备用配置文件,否则,Charles将其配置文件定位并存储在系统特定位置。
  • -headless
    • Headless6 模式运行Charles,没有提供GUI,但Charles仍然可以代理内容,您可以使用Web界面控制Charles的行为。
  • -throttling
    • 在启用流量限制的情况下启动Charles。

  1. 套接字百度百科 ↩︎

  2. Socks代理百度百科 ↩︎

  3. Ethereal代理百度百科 ↩︎

  4. AMF百度百科 ↩︎

  5. TRACE百度百科 ↩︎

  6. 无头模式,没有提供GUI的纯命令行模式 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何小有

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值