Charles 抓包工具使用指南:设置、功能详解与最佳实践

5,948 阅读1小时+

引言

前段时间入职了一家公司, 项目中的代码注释比较少。而且代码量大 比较难以理解每个接口的数据情况,所以我们需要安装项目测试环境包,通过抓包来查看请求参数和 header,分析接口的行为,借此来理解代码逻辑。我需要用到 Charles 配合模拟器来进行抓包调试。所以今天我来大概总结下Charles的用法以及结合模拟器的简单使用。

Charles

Charles 是一款强大的抓包调试工具,相信做 Android 和 Apple 开发的同事会经常用到。我平时在 PC 端抓包接口也经常用 Charles。而且 Charles 对移动端的支持非常友好,能够方便地与模拟器或真实设备结合,帮助开发者分析 app 的网络流量。它不仅支持 HTTP 请求,还可以通过 SSL Proxying 解密 HTTPS 流量,让开发者可以查看加密的数据。

Charles 的主要功能

  1. 抓包功能

    • HTTP/HTTPS 抓包:Charles 能够自动捕获 HTTP 和 HTTPS 请求。通过 SSL Proxying 功能,Charles 可以解密 HTTPS 流量,使我们能够查看加密的请求内容。
    • 请求和响应分析:Charles 支持格式化查看请求和响应数据,比如 JSON、XML,方便阅读和分析。同时支持搜索功能,可以快速找到特定的字段。
  2. 修改请求和响应

    • 重发请求 (Repeat) :可以选择任意一个请求重新发送,以测试多次请求的效果。
    • 编辑和重发 (Edit and Resend) :允许我们在重发请求前修改参数、头部等信息,便于测试不同的请求情况。
    • 构建自定义请求 (Compose) :Charles 还允许我们手动创建新请求,用于模拟特定网络请求来测试服务器响应。
  3. 断点调试 (Breakpoints)

    • 设置断点:可以在特定请求上设置断点,使请求在发送或响应返回前暂停。这时候我们可以查看和修改请求或响应的内容。断点调试在模拟服务器响应、验证客户端处理逻辑等场景中特别有用。
  4. 流量控制 (Throttling)

    • 限速:Charles 支持网络限速,可以模拟不同的网络条件(如 3G、4G)。这在测试应用在低网速下的表现非常有帮助,比如检查页面加载速度、响应时间等。
    • 断开连接:可以选择断开会话连接,模拟网络中断的情况,用于测试应用在断网时的表现。
  5. 会话记录和保存

    • 会话保存:Charles 可以保存当前会话记录,方便后续分析。可以选择保存为 .chls 文件,也可以导出为 .har 等格式,便于在其他工具中查看。
    • 会话过滤:Charles 支持按域名、请求类型等条件过滤会话,帮助我们聚焦在特定的请求和响应上,避免干扰。
  6. Map Remote 和 Map Local 功能

    • Map Remote:允许将请求重定向到不同的远程服务器,这对于测试不同环境(如开发环境和生产环境)非常有用。
    • Map Local:可以将请求映射到本地文件,模拟服务器返回的响应。这样在本地就可以测试特定的数据格式,而无需依赖真实服务器。
  7. 外部工具集成和设置

    • Charles 可以导出会话记录,适配其他调试和分析工具(如 Postman)。还可以配置代理、DNS 和访问控制等设置,以满足复杂的网络调试需求。

Charles 对移动端调试的支持非常友好,可以通过代理和 SSL 解密轻松捕获 app 发出的网络请求。此外,Charles 的断点、限速等功能也能帮助我们模拟真实的网络环境,提升调试效率。这些特点使 Charles 成为移动端开发者的理想选择,特别是在没有接口文档的情况下,通过抓包可以直观地查看请求参数和响应格式,为理解代码逻辑提供极大帮助。


Charles 的下载与安装

要开始使用 Charles,我们首先需要完成下载和安装。以下是具体步骤:

  1. 下载 Charles

    • 访问 Charles 的官方网站 www.charlesproxy.com

    • 在首页点击“Download”按钮,根据操作系统(Windows 或 macOS)选择对应的安装包进行下载。

      提示:Charles 是一款收费软件,提供 30 天的免费试用期。在试用期内,用户可以享受 Charles 的全部功能,无任何使用限制。然而,试用期过后,未付费的用户仍然可以继续使用 Charles,但会受到一些限制 比如试用期结束后,Charles 会将每次会话的使用时长限制为 30 分钟。每隔 30 分钟,未付费用户需要手动重新启动 Charles 才能继续使用 而且试用期结束后,Charles 在启动时会有一个 10 秒钟的延时提示窗口,提醒用户购买许可证。此窗口在 10 秒后会自动关闭,用户才能进入软件界面。 我是百度搜了一个账号密码激活了一下哈哈

      image.png

  2. 安装 Charles

    • 在 Windows 上安装:双击下载的安装包,按照安装向导的提示进行安装。一般情况下,可以选择默认的安装目录。安装完成后,在桌面或开始菜单中找到 Charles,双击打开即可。
    • 在 macOS 上安装:双击下载的 .dmg 文件,将 Charles 图标拖入“应用程序”文件夹中。安装完成后,可以在“应用程序”中找到 Charles 并打开。
  3. 第一次运行 Charles

    • 第一次启动 Charles 时,系统可能会提示请求网络权限,请点击“允许”,以便 Charles 能够正常工作。
    • Charles 可能会弹出 SSL Proxying 相关的提示,询问是否安装根证书。可以暂时跳过这一步,后续我们会详细讲解如何安装 SSL 证书以抓取 HTTPS 流量。
  4. 设置 Charles 的界面语言(可选)

    • Charles 默认是英文界面,如果习惯使用英文可以保持默认设置。如果需要其他语言,可以在设置中调整(不过目前 Charles 主要支持英文界面)。
  5. Charles 激活

    • 按照我上面所说 如果不激活的话 调试起来相当麻烦 特别是我这种还要一边调试一边看抓包接口上下文的情况 所以我从百度搜了一个账号密码进行了注册。首先我们打开Charles的Help窗口(我是已经注册成功了,未激活情况下是显示 ‘Register Charles...’):

      image.png

    • 然后点击这个 ‘Register Charles...’ 后输入账号:Registered Name: zhile.io ---- License Key: 48891cf209c6d32bf4

    我激活的时候用的是上面的这个账号和key。不过这个会不会长期有效我就不确定了哈。


Charles 主界面功能

Charles的主界面主要就长这样:

image.png

工具导航栏

我先说明一下上面那几个图标的功能和用处:

扫帚图标(Clear Session) :

  • 清除当前会话的记录。点击此图标后,Charles 界面中显示的所有请求和响应记录都会被清空,方便用户在新的会话中开始抓包分析。

红色圆圈(Record/Stop)

  • 控制 Charles 的抓包功能。红色圆圈:表示 Charles 正在记录网络请求(即抓包功能已启动)。此时,所有网络请求和响应都会被捕获并显示在会话列表中。灰色圆圈:表示 Charles 的抓包功能已停止。此时,Charles 不会记录任何网络请求或响应。

锁图标(SSL Proxying)

  • 控制 SSL 解密功能。点击此图标可以启用或禁用 SSL Proxying 功能。启用后,Charles 将可以解密 HTTPS 流量,方便用户查看加密请求的数据内容。

乌龟图标(Throttling)

  • 启用或禁用限速功能(Throttling)。开启限速功能后,Charles 可以模拟不同的网络环境(如 3G、4G、Wi-Fi),方便测试应用在不同网络速度下的表现。

六边形图标(Breakpoints)

  • 启用或禁用断点功能。当该功能启用时,Charles 会在请求发送前或响应返回前暂停,允许用户查看并修改请求或响应的内容,适合调试和测试不同的返回值。

钢笔图标(Edit/Compose)

  • 进入编辑和重发模式。此功能允许用户选择一个已捕获的请求,并在重新发送前编辑请求的 URL、参数和头部信息,或者直接创建一个新请求。

旋转箭头(Repeat)

  • 重复发送选定的请求。可以用来测试同一请求的多次发送效果,方便测试服务器的稳定性和响应一致性。

绿色勾图标(Auto-Respond)

  • 启用自动响应功能。配置后,Charles 可以对符合特定条件的请求自动返回预设的响应内容,适用于本地调试和离线开发。

扳手与螺丝刀图标(Settings/Tools)

  • 打开 Charles 的设置和工具选项。点击后可以进入 Charles 的配置界面,进一步设置代理、SSL、限速等功能的详细参数。

齿轮图标(Proxy Settings)

  • 进入 Charles 的代理设置。通常用于设置 Charles 的代理端口和监听 IP 地址,以确保 Charles 能够正确捕获到所需的网络流量。

这些图标和按钮是 Charles 主界面中最常用的工具,能够帮助用户灵活控制抓包、限速、断点调试等功能,让网络调试过程更加高效。

主界面视图

可以看到Charls左侧有两个查看封包的视图,分别名为 Structure 和 Sequence

image.png

StructureSequence 是用于查看和组织捕获到的网络请求的两种不同视图方式:

  1. Structure(结构视图)

    • 功能:以层次结构(树状结构)显示捕获到的网络请求,通常按域名和路径进行分组。
    • 用途:结构视图可以帮助用户从域名和路径的角度快速找到特定的请求,非常适合查看来自同一域名的所有请求或浏览接口的层次结构。
    • 场景:当你想要按照服务器或 API 结构来查看请求时,结构视图会更清晰,便于分析各个路径下的请求情况。
  2. Sequence(顺序视图)

    • 功能:按时间顺序显示所有捕获到的请求,最新的请求会显示在列表的底部(或顶部,视设置而定)。
    • 用途:顺序视图更适合查看请求的时间顺序,帮助分析请求的执行顺序和响应时间。
    • 场景:当你需要观察请求的发送顺序,或需要分析某些请求是否导致其他请求的触发时,顺序视图会更加直观。

就像这样的结构

image.png

image.png 通过在 StructureSequence 之间切换,可以方便地以不同的方式查看和组织 Charles 捕获到的请求,以满足不同的调试需求。


Charles 的菜单栏介绍

Charles 的菜单栏包含了各种功能选项,是我们进行抓包设置、调试和控制的主要入口。其中我们用的最多的就是 Proxy 和 Tools这两个菜单。稍后调试也是需要操作这两个菜单,我先介绍下各个菜单项的功能和用法:

1. File 菜单

image.png

  • New Session (⌘N):开启新的会话,开始新的抓包记录。
  • Open Session... (⌘O):打开已保存的会话文件(通常为 .chls)。
  • Clear Session (⌘⌥X):清除当前会话的所有记录。
  • Close Session (⌘W):关闭当前会话窗口。
  • Save Session (⌘S):保存当前会话记录。
  • Save Session As... (⇧⌘S):另存当前会话记录。
  • Import... :导入会话数据,支持 .har.xml 等格式。
  • Export Session... :导出当前会话数据,支持多种文件格式。

2. Edit 菜单

image.png

  • Cut/Copy/Paste:用于剪切、复制和粘贴请求数据。
  • Select All (⌘A):选择所有会话记录。
  • Find... (⌘F):在请求和响应中查找内容。
  • Find Next (⌘G) 和 Find Previous (⇧⌘G):查找下一个或上一个匹配项。

3. View 菜单

image.png

  • Structure / Sequence:切换为结构视图或顺序视图。
  • Overview (⌘1)、Summary (⌘2)、Chart (⌘3):显示不同的统计和图表视图,帮助分析请求分布和流量。
  • Highlight Rules... :配置高亮规则,便于快速识别特定类型的请求。
  • Focused Hosts... :聚焦于特定主机的请求。
  • Viewer Mappings... :设置查看器的映射方式,以便不同类型数据有合适的显示方式。
  • Protobuf Settings... :配置 Protobuf 解析设置,适用于解析 Protobuf 数据格式。

4. Proxy 菜单

image.png

  • Start/Stop Recording:控制会话记录的启动和停止。
  • Stop SSL Proxying:启用或停用 SSL 解密。
  • Start Throttling:启用限速功能。
  • Enable Breakpoints:启用断点调试功能。
  • Recording Settings... :配置录制设置。
  • SSL Proxying Settings... :配置 SSL 解密的域名设置。
  • Throttle Settings... :设置网络限速参数。
  • Breakpoint Settings... :配置断点设置条件。
  • Reverse Proxies... :设置反向代理。
  • Port Forwarding... :配置端口转发。
  • macOS Proxy:将 Charles 设置为 macOS 系统代理,捕获所有系统流量。
  • Proxy Settings... :设置代理端口和 IP。
  • DNS Settings... :自定义 DNS 解析。
  • Access Control Settings... :控制哪些 IP 可以访问 Charles。
  • External Proxy Settings... :设置外部代理服务器。
  • External DNS Resolver Settings... :配置外部 DNS 解析器。
  • Web Interface Settings... :设置 Web 界面访问配置。

5. Tools 菜单

image.png

  • No Caching... :禁用缓存,确保每个请求都直接发往服务器。
  • Block Cookies... :禁用 Cookie,便于测试无 Cookie 情况。
  • Map Remote... :将请求重定向到其他服务器,便于环境切换。
  • Map Local... :将请求映射到本地文件,适合离线调试。
  • Rewrite... :修改请求或响应数据。
  • Block List... / Allow List... :配置阻止和允许的请求列表。
  • DNS Spoofing... :将域名解析到特定 IP,适用于测试不同服务器。
  • Mirror... :镜像流量,用于流量备份。
  • Auto Save... :自动保存会话。
  • Client Process... :设置客户端进程。
  • Compose / Compose New... :手动创建新的请求。
  • Repeat / Advanced Repeat:重复请求或配置高级重复请求。
  • Validate:验证请求。
  • Publish Gist:发布请求数据到 Gist。
  • Import/Export Settings... :导入和导出配置。
  • Profiles... :管理 Charles 配置文件。
  • Publish Gist Settings... :配置发布到 Gist 的设置。

6. Window 菜单

image.png

  • Session:查看当前会话窗口。
  • Error Log:查看 Charles 的错误日志。
  • Active Connections:查看活动的连接。
  • Toggle Full Screen (⌘F):切换全屏模式。

7. Help 菜单

image.png

  • Registered to... :显示当前注册状态和注册信息。
  • Unregister Charles... :取消 Charles 的注册状态。
  • About Java:查看 Java 相关信息。
  • Local IP Address:查看本地 IP 地址。
  • SSL Proxying:帮助安装 SSL 证书。
  • Check for Updates:检查 Charles 更新。
  • Visit Website:访问 Charles 官方网站。

接下来我们重点了解一下Proxy 菜单和Tool菜单的使用。

Proxy菜单

Proxy菜单各项的简单说明上面我们已经说过了。现在我们说几个平常用的比较多的选项:

Recording Settings(配置录制设置)

Recording Settings 是 Charles 中用于配置录制选项的设置。通过这个选项,用户可以控制 Charles 在抓包过程中的录制行为,设置录制的数据量限制、请求记录的数量,以及 WebSocket 消息的记录量等。它的主要作用是帮助用户优化抓包数据的管理,防止 Charles 记录过多数据而导致系统性能下降或数据杂乱难以管理。

点击 Recording Settings... 后,会弹出一个设置窗口,如截图所示,包含以下三个标签页:

image.png

1. Options 标签页
  • Recording size limit (MB) :设置录制数据的大小限制(以 MB 为单位)。默认是 100 MB,当 Charles 的录制数据量达到该限制时,将停止录制。

    • 用途:限制数据大小可以防止 Charles 记录过多数据,避免因内存使用过高而导致性能问题。
  • Limit recording history:启用后可以限制 Charles 记录的最大请求数量。

    • Max requests:指定 Charles 可以记录的最大请求数量。超出该数量的旧请求将自动被清除。
    • 用途:在处理大量请求时,设置请求数量限制可以确保 Charles 只记录指定数量的请求,避免因记录过多数据而难以管理。
  • Limit WebSocket transaction history:启用后可以限制 Charles 记录的 WebSocket 消息数量。

    • Max messages:指定 Charles 可以记录的最大 WebSocket 消息数量,超出该数量的旧消息将自动被清除。
    • 用途:在处理 WebSocket 数据时,限制消息数量可以避免不必要的消息记录,便于专注于最新的消息数据。

2. Include 标签页

image.png

  • 功能:在这个标签页中,可以选择只记录特定的请求或数据类型。用户可以根据域名、路径或协议类型等条件来设置过滤规则,使 Charles 只记录符合条件的请求。
  • 用途:当用户只关心某些特定的请求(例如只记录某个域名的请求或特定类型的 API 请求)时,可以使用 Include 选项来过滤不相关的数据,从而减轻数据管理的负担。

Include 标签页中,我们可以设置 Charles 只记录符合特定条件的请求。这对于只关心某些特定域名或 API 请求的场景非常有用,因为它可以有效过滤不相关的请求,减少不必要的数据记录。

当打开 Include 标签页时,会看到一个列表,其中列出了当前已经配置的过滤条件。如果这个列表为空,则 Charles 将默认记录所有请求。列表中的每个条目表示一个过滤条件,只有符合这些条件的请求才会被记录到会话中。

  • Location:这个列显示每个过滤条件的具体位置(例如协议、域名、端口等)。在截图中,可以看到一个默认条目 https://*:443,它表示 Charles 只会记录 HTTPS 请求(通过 443 端口)。
如何添加过滤条件
  1. 点击 Add 按钮

    • 要添加新的过滤条件,首先点击 Add 按钮。这会打开 Edit Location 窗口,允许用户自定义过滤条件的详细信息。

      image.png

  2. Edit Location 窗口详解
    Edit Location 窗口中,可以设置以下参数:

    • Protocol:指定协议类型,比如 httphttps。可以选择特定的协议来过滤请求。如果留空,则匹配所有协议。

    • Host:指定主机名或 IP 地址。可以输入特定的域名(例如 example.com),或使用通配符 * 表示任意域名。

      • 例如,输入 api.example.com 只记录来自该主机的请求,输入 *.example.com 则会记录所有子域名的请求。
    • Port:指定端口号。可以输入特定的端口号(例如 80443),或者留空表示任意端口。

      • 例如,指定端口 443 表示只记录 HTTPS 请求。
    • Path:指定 URL 路径。可以填写具体的路径(例如 /api/v1/resource),或使用通配符 * 匹配所有路径。

      • 例如,输入 /api/* 表示记录所有以 /api/ 开头的请求路径。
    • Query:指定 URL 中的查询参数。可以通过特定的查询参数进一步过滤请求。

      • 例如,输入 id=123 表示只记录包含 id=123 参数的请求。

    注意:所有字段均支持使用通配符 *? 进行匹配。例如,* 表示任意字符,? 表示单个字符。

  3. 点击 OK 确认添加

    • 设置完各项参数后,点击 OK 按钮确认添加。新的过滤条件会显示在 Include 列表中。
    • Charles 会根据 Include 列表中的规则过滤请求,只有符合这些条件的请求才会被记录。
使用示例

假设我们只想记录以下请求:

  • 所有 HTTPS 请求。
  • 主机名为 api.example.com 的请求。
  • URL 路径以 /v1 开头的请求。

步骤如下:

  1. 点击 Add,在 Protocol 中选择 https,Host 中输入 api.example.com,Path 中输入 /v1/*
  2. 点击 OK 添加该规则。
  3. Charles 现在只会记录符合 https://api.example.com/v1/* 条件的请求,其他请求将被忽略。

通过设置 Include 标签页中的过滤条件,用户可以灵活控制 Charles 只记录特定请求,减少无关数据,提高数据的管理效率。这在需要聚焦于特定 API 或域名时非常有帮助。


3. Exclude 标签页
  • 功能:与 Include 标签页相反,Exclude 标签页用于排除不需要记录的请求。用户可以设置 Charles 忽略特定的域名、路径或协议类型的请求。
  • 用途:如果在抓包时有一些不需要的流量(例如来自某些第三方服务的请求)影响分析,可以将它们排除在外,使记录数据更加简洁。
使用场景
  • 控制录制数据量:通过设置录制大小和请求数量限制,可以防止 Charles 记录过多数据,保护系统资源。
  • 过滤不必要的数据:使用 Include 和 Exclude 标签页的选项,可以精准控制 Charles 记录的内容,避免不相关的流量影响分析。
  • 优化 WebSocket 消息管理:限制 WebSocket 消息数量,适用于只关注最近消息的场景。

SSL Proxy Settings(SSL 代理设置)

SSL Proxying Settings(SSL 代理设置)是 Charles 中用于配置 SSL 流量解密的功能。通过启用 SSL 代理,Charles 可以拦截和解密 HTTPS 请求,帮助用户查看加密流量的内容。这对于调试 HTTPS 请求非常有用,尤其是在查看和分析数据包内容时。SSL Proxying Settings 包含四个标签页:SSL ProxyingServer CertificatesClient CertificatesRoot Certificate,以下是每个标签页的详细介绍。

1. SSL Proxying 标签页

image.png

  • Enable SSL Proxying

    • 功能:启用 SSL 代理解密。勾选后,Charles 将拦截并解密符合条件的 HTTPS 请求。
    • 用途:启用后,Charles 可以解密并显示 HTTPS 请求和响应的明文内容,适合在调试加密流量时使用。
  • Include 列表

    • 功能:指定需要解密的请求地址。可以添加特定的域名、端口或路径,以限制解密范围。
    • 用途:只解密符合特定条件的 HTTPS 流量,避免解密不相关的请求。例如,默认包含 *:443,表示对所有 HTTPS 流量进行解密。
  • Exclude 列表

    • 功能:指定不需要解密的请求地址。可以添加域名、端口或路径,排除不需要解密的流量。
    • 用途:如果某些流量不需要解密(如第三方支付服务等),可以将其添加到 Exclude 列表,以避免捕获敏感信息。
  • Add 和 Remove 按钮

    • 功能:添加或删除解密规则。
    • 用途:通过 Add 按钮可以设置新的解密条件,通过 Remove 按钮可以删除不再需要的解密规则。
使用示例

假设只想解密来自 example.com 域名的 HTTPS 流量,可以执行以下操作:

  1. 点击 Add 按钮,在弹出的窗口中输入 Hostexample.comPort443
  2. 点击 OK 确认。新规则会添加到 Include 列表中,Charles 将只解密符合条件的流量。

2. Server Certificates 标签页
  • 功能:管理服务器证书。
  • 用途:用户可以查看并管理 Charles 为不同服务器颁发的 SSL 证书。可以清除不再需要的证书,或导出证书以供其他用途。
3. Client Certificates 标签页
  • 功能:配置客户端证书。
  • 用途:当访问某些需要客户端证书认证的服务器时,可以在此处添加相应的客户端证书,确保 Charles 能够成功解密和访问受保护的资源。
4. Root Certificate 标签页
  • 功能:管理 Charles 根证书。
  • 用途:用于查看、安装和导出 Charles 根证书。安装 Charles 根证书是启用 SSL 代理的关键步骤,尤其是在调试 HTTPS 流量时。用户可以在此标签页中将根证书安装到系统中或导出到移动设备,以便对设备上的流量进行解密。
总结

SSL Proxying Settings 是 Charles 中非常重要的功能,主要用于配置 HTTPS 流量的解密。通过 SSL Proxying 标签页设置需要解密的流量范围,而 Server CertificatesClient CertificatesRoot Certificate 标签页则帮助用户管理证书,确保 Charles 能够成功解密加密的流量。在需要调试 HTTPS 请求和查看加密数据内容的场景中,这些设置至关重要。


Throttle Settings(设置网络限速参数)

Throttle Settings 是 Charles 中用于设置网络限速的选项,能够模拟不同的网络环境(如慢速连接、延迟较高的网络等)。通过此设置,我们可以在 Charles 中为请求配置带宽、延迟和其他网络特性,以测试应用在不同网络条件下的表现。这个功能对于移动应用或 Web 应用的性能优化和稳定性测试尤为重要。

Throttle Settings 界面详解

打开 Throttle Settings 界面后,看到如下设置项:

image.png

  1. Enable Throttling

    • 功能:启用限速功能。当勾选此选项时,Charles 会对所有捕获的请求应用限速设置。
    • 用途:开启后,Charles 会模拟预设的网络条件(如慢速网络、延迟等),帮助测试应用在不同网络环境下的响应时间和表现。
  2. Only for selected hosts

    • 功能:仅对特定主机启用限速功能。
    • 用途:如果勾选此选项,则只会对设置列表中的指定主机应用限速,而不会对其他主机产生影响。这适用于只想对某些域名或 IP 进行限速的场景。
  3. Location 列表

    • 功能:显示当前限速生效的主机列表。可以在列表中添加或移除特定主机,以控制限速范围。
    • 用途:用户可以根据需要,添加想要限速的特定主机地址。点击 Add 可以配置新的主机限速,点击 Remove 可以删除已配置的主机。
下方的 Throttle Preset 配置项

Charles 提供了多项预设和自定义的限速设置,以便模拟不同的网络条件。主要参数如下:

  1. Throttle Preset

    • 功能:提供一些预设的网络环境选项,比如 56 kbps 调制解调器(Modem)、DSL、3G、4G 等。
    • 用途:选择一个预设项时,相关的下载、上传带宽、延迟等参数会自动填入,方便快速设置常见的网络环境。
  2. Download / Upload Bandwidth (kbps)

    • 功能:设置下载和上传的带宽(以 kbps 为单位)。
    • 用途:模拟网络速度的快慢,例如可以将下载速度设置为 256 kbps、上传速度设置为 128 kbps,以模拟低速网络环境。
  3. Utilisation (%)

    • 功能:设置网络利用率的百分比,控制 Charles 实际使用的带宽占比。
    • 用途:当利用率设为 70%,表示 Charles 实际带宽利用率只有 70%,从而模拟不稳定的网络条件。
  4. Round-trip latency (ms)

    • 功能:设置往返延迟时间(以毫秒为单位),表示数据包从客户端发送到服务器并返回的时间。
    • 用途:可以通过设置延迟模拟高延迟网络环境,测试应用在延迟较高时的表现,比如设置延迟为 250 ms,模拟海外访问的情况。
  5. MTU (bytes)

    • 功能:设置最大传输单元(MTU),即数据包的最大大小。
    • 用途:模拟不同的网络传输限制,通过降低 MTU 测试应用在数据包分片或小包传输时的表现。
  6. Reliability (%)

    • 功能:设置网络的可靠性百分比,控制请求的成功率。
    • 用途:通过调整可靠性,可以模拟不稳定的网络环境,比如设为 80% 表示网络中有 20% 的请求会失败,测试应用的重试或错误处理机制。
  7. Stability (%)

    • 功能:设置网络连接的稳定性。
    • 用途:模拟网络时不时断开的场景,观察应用在频繁连接断开时的恢复表现。
  8. Unstable Quality Range (%)

    • 功能:设置不稳定质量的波动范围。
    • 用途:用来模拟不稳定网络下带宽的波动范围,测试应用在网络波动较大时的表现。
  9. Add Preset / Remove Preset

    • 功能:可以根据需要添加新的限速预设或删除现有的预设。
    • 用途:自定义特定的网络条件作为预设,方便后续在不同场景中快速调用。
使用场景
  • 测试应用性能:通过限速模拟不同网络环境(如 3G、4G、Wi-Fi 等),帮助开发者优化应用在低网速或高延迟网络下的响应时间和用户体验。
  • 验证错误处理机制:通过设置低可靠性、低稳定性来模拟不可靠的网络,测试应用在请求失败或频繁断开连接时的错误处理逻辑。
  • 跨境网络测试:通过调整往返延迟(Round-trip latency),可以模拟海外访问的网络延迟,以验证应用在跨境访问时的表现。

Throttle Settings 为开发者提供了丰富的网络模拟功能,是 Charles 中用于性能测试和网络行为分析的重要工具。


Breakpoint Settings(配置断点设置条件)

Breakpoint Settings 是 Charles 中设置请求和响应断点的功能,允许用户在请求发送前或响应返回前拦截流量并手动查看、修改内容。这个功能非常适合用于调试和测试不同的请求参数或响应数据,帮助开发者模拟各种场景,观察应用的处理逻辑。

Breakpoint Settings 界面详解

打开 Breakpoint Settings 后,可以看到以下选项:

image.png

  1. Enable Breakpoints

    • 功能:启用断点功能。当勾选此选项时,Charles 将对符合条件的请求或响应设置断点。
    • 用途:通过启用断点,可以拦截请求和响应,手动查看或编辑内容,从而在调试和测试中模拟各种情况。
  2. Location 列表

    • 功能:显示当前已配置断点的请求和响应的位置(URL、主机等)。在这里可以添加、移除或编辑断点规则。
    • 用途:方便查看或管理所有已设置的断点条件,以确保 Charles 只对指定的请求设置断点,不干扰其他流量。
如何设置断点
  1. 点击 Add 按钮

    • 要添加新的断点规则,点击 Add 按钮,Charles 会弹出配置窗口,让用户选择拦截条件。
  2. 配置断点条件

    • 添加断点时,用户可以设置具体的条件,如协议、主机(Host)、端口(Port)、路径(Path)和查询参数(Query)等。以下是各参数的作用:

      • Protocol:可以选择 httphttps,指定对特定协议的请求设置断点。
      • Host:设置特定的主机名或 IP 地址(例如 api.example.com),仅对该主机的请求启用断点。
      • Port:指定端口号,比如 80443,控制断点只在特定端口生效。
      • Path:指定 URL 路径,例如 /api/v1/resource,可以使用通配符 * 表示所有路径。
      • Query:指定 URL 查询参数,例如 id=123,这样只有包含该参数的请求会触发断点。

    注意:这些字段支持使用通配符 *? 进行匹配,以便更灵活地设置断点条件。

  3. 点击 OK 确认添加

    • 设置完成后,点击 OK 确认。新断点规则会显示在 Location 列表 中。
    • Charles 会根据这些规则在请求发送前或响应返回前触发断点,用户可以手动查看和修改内容。
断点操作

一旦断点被触发,Charles 会暂停请求的发送或响应的返回,并弹出断点窗口。在断点窗口中,可以进行以下操作:

  • 查看和修改请求/响应:可以手动更改请求的参数或响应的数据,然后点击继续,让修改后的内容发送到服务器或返回给客户端。
  • 继续或放弃请求:可以选择继续(Forward)请求或放弃(Abort)请求。

这在模拟不同场景时非常有用,比如返回特定的错误代码或数据,观察客户端在不同响应情况下的表现。

使用场景
  • 模拟服务器错误:通过手动修改响应数据,可以返回特定的错误代码或消息,测试应用的错误处理逻辑。
  • 调试参数传递:在请求发送前修改参数或头信息,验证服务器对不同参数的处理。
  • 测试应用的容错能力:通过断点返回不完整数据或异常格式的数据,测试应用的容错性。

Breakpoint Settings 是 Charles 中强大且灵活的调试工具,尤其适合用于精确控制请求和响应的行为,有助于深入测试和调试网络请求。


Reverse Proxies Settings(设置反向代理)

Reverse Proxies 是 Charles 中的反向代理功能,允许用户将请求重定向到另一个服务器或地址。通过设置反向代理,开发者可以在不修改客户端代码的情况下,将应用程序的请求从一个服务器重定向到另一个服务器,比如将请求从生产环境重定向到测试环境。这在调试、测试和环境切换中非常实用。

Reverse Proxies 的主要功能
  • 重定向请求:将指定的请求路径或域名重定向到另一个服务器或路径,方便在不同环境中切换,而无需更改客户端代码。
  • 测试不同环境:可以将请求从生产服务器重定向到测试服务器,模拟真实流量在测试环境中的表现。
  • 调试和故障排查:将流量重定向到本地开发服务器,以便在不影响生产环境的情况下进行调试和问题排查。
如何配置 Reverse Proxies
  1. 打开 Reverse Proxies 设置

    • 在 Charles 菜单中,选择 Proxy > Reverse Proxies... ,打开反向代理配置窗口。

      image.png

  2. 添加新的反向代理规则

    • 点击 Add 按钮,打开配置窗口,输入需要重定向的源地址和目标地址。
  3. 配置源地址和目标地址

    • Protocol:选择源请求的协议类型,如 httphttps

    • Host:输入源服务器的主机名(例如 example.com)。只有匹配该主机名的请求才会触发反向代理。

    • Port:指定源请求的端口号(例如 80443),如果不指定则匹配所有端口。

    • Path:指定源请求的路径(例如 /api/v1),可以使用通配符 * 来匹配路径。

    • Map to:配置目标地址,包括协议、主机、端口和路径,即请求将被重定向到的服务器地址。

      • Protocol:目标服务器的协议(http/https)。
      • Host:目标服务器的主机名或 IP 地址(例如 test.example.com)。
      • Port:目标服务器的端口号。
      • Path:目标路径。例如可以将 /api/v1 请求重定向到 /api/v2
  4. 确认配置

    • 设置完成后,点击 OK 确认。新规则会显示在 Reverse Proxies 列表中。
    • Charles 将会根据该规则拦截符合条件的请求并重定向到目标地址。
使用示例

假设我们有一个应用在生产环境中调用 https://api.example.com/v1/data,但现在希望将请求重定向到测试环境 https://staging.example.com/v1/data。配置步骤如下:

  1. Host 中输入 api.example.com
  2. Protocol 选择 https
  3. Map to 中的 Host 输入 staging.example.com
  4. 点击 OK 确认。

现在,所有对 https://api.example.com/v1/data 的请求将会被重定向到 https://staging.example.com/v1/data

使用场景
  • 环境切换:在开发、测试和生产环境之间无缝切换请求,便于测试不同环境的功能。
  • 调试和开发:在开发过程中将请求重定向到本地服务器进行调试,方便实时测试新功能。
  • 流量分配:部分流量可以通过 Charles 的反向代理功能重定向到测试环境,进行灰度测试。

Reverse Proxies 是一个灵活的工具,帮助开发人员轻松管理和切换请求流向,避免直接修改客户端代码,从而更高效地完成调试和测试工作。


Port Forwarding Settings(端口转发)

Port Forwarding Settings(端口转发设置) 是 Charles 中用于配置端口转发的功能。端口转发允许用户将本地的 TCP 和 UDP 端口流量重定向到远程服务器上的指定端口,这在开发和测试场景中非常有用。例如,可以将本地应用程序的请求转发到远程服务器的特定端口,或模拟不同的服务器环境。

Port Forwarding Settings 界面详解

打开 Port Forwarding Settings 界面后,会看到以下设置项:

image.png

  1. Enable Port Forwarding

    • 功能:启用端口转发功能。当勾选此选项时,Charles 会根据配置的转发规则将本地端口的请求重定向到远程端口。
    • 用途:在需要将本地端口流量重定向到远程服务器时启用。例如,在本地测试时,访问本地端口的请求可以通过端口转发直接发送到远程服务器。
  2. Location 列表

    • 功能:显示当前已配置的端口转发规则。每一行包含一个转发规则的详细信息,包括转发的端口范围、目标主机和远程端口。
    • 用途:方便查看、添加和删除端口转发规则,以便对特定流量进行重定向。
配置端口转发规则
  1. 点击 Add 按钮

    • 要添加新的端口转发规则,点击 Add 按钮。此时会弹出一个窗口,让用户输入详细的转发信息。
  2. 设置端口转发规则

    • Type:选择端口类型,通常是 TCP 或 UDP,根据需要选择。
    • Start PortEnd Port:指定本地端口范围。可以只输入一个端口号(起始和结束端口相同)或指定一个范围(例如 3000 到 3005),这样范围内的所有端口请求都会被转发。
    • Remote Host:输入远程服务器的主机名或 IP 地址,Charles 会将本地请求重定向到这个目标主机。
    • Remote Port:输入远程服务器的端口号,将本地端口请求转发到指定的远程端口。

    注意:必须确保远程服务器的端口是开放的,并且防火墙允许通过。

  3. 点击 OK 确认添加

    • 设置完成后,点击 OK。新的端口转发规则会出现在 Location 列表中,Charles 会根据该规则重定向符合条件的流量。
使用示例

假设我们希望将所有对本地端口 8080 的请求转发到远程服务器 test.example.com 的 80 端口,步骤如下:

  1. Type:选择 TCP
  2. Start PortEnd Port:都输入 8080
  3. Remote Host:输入 test.example.com
  4. Remote Port:输入 80
  5. 点击 OK 确认规则。

现在,所有发送到本地端口 8080 的请求都会被自动转发到 test.example.com 的 80 端口。

使用场景
  • 测试环境重定向:将本地应用的请求转发到测试服务器或其他环境,不需更改应用程序代码。
  • 本地模拟远程服务器:通过端口转发,将远程服务器的请求重定向到本地,以便在本地调试和测试。
  • 多端口转发:当需要同时测试多个端口或服务时,可以通过端口转发设置多个规则,实现本地到远程的端口流量转发。

Port Forwarding Settings 是 Charles 中的高级功能,帮助开发者灵活地控制本地和远程服务器之间的流量转发,极大地简化了在多服务器或多环境下的测试流程。


macOS Proxy(记录电脑所有请求)

macOS Proxy(在 Mac 上)和 Windows Proxy(在 Windows 上)是 Charles 中的系统代理设置功能。它们的作用是将 Charles 设置为操作系统的全局代理,从而捕获系统中所有网络请求。通过启用这个选项,Charles 可以自动拦截和监控操作系统以及所有应用程序的网络流量,而不仅限于浏览器。

macOS Proxy / Windows Proxy 的功能和用途
  1. 设置为系统代理

    • 功能:将 Charles 设置为整个操作系统的代理服务器。启用此选项后,所有应用程序的网络请求都会通过 Charles 代理,Charles 就可以拦截和分析这些请求。
    • 用途:这种方式让 Charles 可以全局捕获网络请求,而不仅仅局限于某些应用程序或浏览器插件。这非常适合在开发和调试过程中需要查看整个系统或多应用之间的网络交互时使用。
  2. 自动代理配置

    • Charles 通过启用 macOS Proxy 或 Windows Proxy,可以自动修改系统的网络代理设置,将 Charles 的监听端口(默认是 8888)设置为系统的代理端口。
    • 在 Mac 上,Charles 会将自身设为 System Preferences > Network 中的代理服务器。
    • 在 Windows 上,Charles 会将自身设为 Settings > Network & Internet > Proxy 中的代理服务器。
    • 用途:自动配置代理可以简化设置流程,避免手动配置代理地址和端口。
  3. 捕获全局 HTTPS 流量

    • 如果启用了 SSL Proxying(Charles 的 HTTPS 解密功能),并且安装了 Charles 的根证书,Charles 将可以捕获和解密整个系统的 HTTPS 流量,包括系统级应用和其他没有独立代理设置的应用。
    • 用途:当需要调试 HTTPS 请求时,可以通过系统代理的方式捕获所有加密流量,适用于查看加密数据请求的内容。
  4. 轻松启用和禁用

    • 通过在 Charles 中简单点击 macOS ProxyWindows Proxy 选项,就可以快速启用或禁用代理设置,无需在系统设置中手动更改。
    • 用途:可以根据需求随时启动或停止全局代理。例如,调试过程中可以启用代理,调试完成后可以快速关闭,方便进行网络请求的管理。
使用场景
  • 全局抓包:在调试一个应用程序的网络流量时,很多情况下需要查看整个系统或多个应用之间的网络交互,例如 API 调用、系统服务、后台服务等。启用 macOS ProxyWindows Proxy 后,Charles 能够全局捕获所有这些请求。
  • 跨应用调试:某些应用(如桌面客户端、手机模拟器)可能没有独立的代理设置,或者不支持手动配置代理。通过系统代理,Charles 可以自动拦截这些应用的流量,方便跨应用的数据分析。
  • HTTPS 流量解密:通过与 Charles 的 SSL Proxying 配合使用,可以捕获和解密系统中所有 HTTPS 请求的内容,适用于调试加密数据。
注意事项
  • 证书安装:在使用 HTTPS 解密时,系统代理可能需要 Charles 根证书的信任。请确保在系统的证书管理工具中信任 Charles 证书(Mac 上为 钥匙串访问,Windows 上为 证书管理器)。
  • 隐私和安全:全局代理可能会捕获系统中的所有流量,注意保护敏感数据的隐私。在不需要时,及时关闭系统代理,避免过多数据被捕获。
  • 系统性能:在启用全局代理时,Charles 可能会处理大量数据,可能会影响系统性能。在需要高性能或低延迟网络时,请谨慎使用。
启用方法
  • macOS:在 Charles 中选择 Proxy > macOS Proxy。启用后,macOS 的系统代理会自动配置为 Charles 的代理地址和端口。
  • Windows:在 Charles 中选择 Proxy > Windows Proxy。启用后,Windows 的系统代理会自动配置为 Charles 的代理地址和端口。

macOS ProxyWindows Proxy 功能是 Charles 提供的便捷设置,适用于全局抓包、HTTPS 解密和跨应用的流量分析,使调试和测试更加高效。


Proxy Settings(设置代理端口和 IP)

Proxy Settings(代理设置)是 Charles 中用于配置代理行为的选项。通过这个设置,用户可以控制 Charles 的代理端口、SOCKS 代理、系统代理等参数,灵活管理 Charles 捕获的网络流量。Proxy Settings 中包含三个标签页:ProxiesOptionsmacOS,每个标签页都有不同的功能和用途。

Proxies 标签页

image.png

  1. HTTP Proxy

    • Port:指定 HTTP 代理端口,默认为 8888。可以更改为其他端口号,或者勾选 Use a dynamic port 让 Charles 自动选择一个空闲端口。
    • Support HTTP/2:启用对 HTTP/2 协议的支持,用于捕获和分析 HTTP/2 流量。
    • Enable transparent HTTP proxying:允许透明代理,适用于不支持手动设置代理的设备。
    • 用途:配置 HTTP 代理端口是 Charles 抓包的基础,通过设置合适的端口,可以确保 Charles 捕获到需要的流量。
  2. SOCKS Proxy

    • Enable SOCKS proxy:启用 SOCKS 代理支持。
    • Port:指定 SOCKS 代理端口,默认是 8889。
    • Enable HTTP proxying over SOCKS:允许通过 SOCKS 代理进行 HTTP 代理。
    • Include default HTTP ports (80, 443, 8080, 8443) :包含默认的 HTTP 端口,确保常见端口的流量也能通过 SOCKS 代理。
    • 用途:SOCKS 代理可以用于处理不支持直接代理设置的流量,特别适合某些网络配置复杂的应用。
  3. Restore DefaultsHTTP Proxy ModeSOCKS Proxy Mode

    • Restore Defaults:恢复默认代理设置。
    • HTTP Proxy ModeSOCKS Proxy Mode:选择 HTTP 或 SOCKS 代理模式。
    • 用途:这些选项可以快速切换代理模式或恢复 Charles 默认的代理设置。

Options 标签页

image.png

  1. Bypass Charles for these Hosts & Domains

    • 功能:在此处添加不需要经过 Charles 代理的主机和域名。填入的主机或域名将直接通过系统的网络,不会被 Charles 捕获。
    • 用途:如果有一些不需要监控的流量,比如常用的 CDN、云服务或其他后台服务,可以在这里添加,避免 Charles 捕获这些不相关的流量。

macOS 标签页

image.png

  1. Enable macOS proxy

    • 功能:将 Charles 设置为 macOS 系统的全局代理。
    • 用途:当启用后,macOS 上的所有网络流量将通过 Charles,便于捕获全局流量。
  2. Use HTTP proxy / Use SOCKS proxy

    • 功能:选择代理的协议类型,可以选择 HTTP 或 SOCKS 代理。
    • 用途:根据需要设置代理类型,灵活适应不同的网络环境。
  3. Enable macOS proxy on launch

    • 功能:启动 Charles 时自动启用 macOS 代理。
    • 用途:方便用户在每次启动 Charles 时自动捕获系统流量,省去手动设置的步骤。
使用场景
  • 配置代理端口:在网络环境较复杂的场景中,可以修改 Charles 的默认端口,避免端口冲突。
  • 设置绕过的域名:在 Options 标签页中添加无需代理的域名,减少不必要的流量捕获。
  • 启用全局代理:通过 macOS/Windows 系统代理设置,将 Charles 设置为全局代理,适用于需要捕获整个系统流量的场景。

Proxy Settings 是 Charles 的核心配置之一,帮助用户管理代理行为,使 Charles 能够灵活地捕获和分析指定的网络流量。


Access Control Settings(访问控制设置)

Access Control Settings(访问控制设置)是 Charles 中用于管理访问权限的功能。通过设置访问控制列表,用户可以决定哪些设备能够连接到 Charles 实例,从而控制 Charles 代理的安全性和访问权限。

Access Control Settings 界面详解

image.png

  1. IP Range 列表

    • 功能:显示当前允许访问 Charles 的 IP 地址或 IP 段。列表中包含允许连接到此 Charles 实例的所有设备的 IP 地址。
    • 用途:通过添加或移除 IP 地址,可以灵活控制哪些设备可以使用 Charles 代理。例如,可以允许本地网络中的特定设备连接到 Charles 进行调试。
  2. Add 和 Remove 按钮

    • Add:添加新的 IP 地址或 IP 段,允许该范围内的设备连接到 Charles。
    • Remove:移除不再需要访问权限的 IP 地址或 IP 段,限制该设备的访问。
  3. Prompt to allow unauthorized connections

    • 功能:当未授权设备尝试连接时,弹出提示框询问是否允许连接。如果勾选此选项,Charles 会在有未经授权的设备连接时提示用户做出决定。
    • 用途:适合需要临时允许某些设备连接的情况,提供更灵活的权限管理。
  4. Import 和 Export

    • Import:导入访问控制列表,可以快速加载预设的访问权限。
    • Export:导出当前访问控制列表,方便在其他 Charles 实例或设备上应用相同的访问权限配置。
使用示例
  • 允许单一 IP 连接:如果只想允许 192.168.1.100 连接到 Charles,可以点击 Add,然后在 IP 范围中输入该地址,点击 OK 确认。
  • 允许特定子网连接:例如,可以输入 192.168.1.0/24 以允许整个子网的设备访问 Charles。
  • 开放全网访问:在开发环境下,可以输入 0.0.0.0/0 以允许所有设备连接 Charles(仅适用于 IPv4)。
使用场景
  • 局域网调试:通过限制访问 IP,确保只有局域网中的指定设备可以连接到 Charles 进行调试。
  • 提升安全性:可以避免未经授权的设备连接到 Charles,保障代理的安全性,特别是在公开网络中使用 Charles 时尤为重要。
  • 临时授权:通过启用 Prompt to allow unauthorized connections,当需要临时允许其他设备连接时,可以通过弹出提示进行快速授权。

Access Control Settings 提供了一个简便的访问控制方式,使得 Charles 的代理服务更安全,并且能灵活适应多设备的调试需求。


External Proxy Settings(外部代理设置)

External Proxy Settings(外部代理设置)是 Charles 中用于配置外部代理服务器的选项。通过此设置,用户可以让 Charles 使用外部代理服务器访问互联网,适用于需要通过其他代理才能连接网络的情况,比如在公司内网中使用 Charles 时,可能需要配置一个外部代理。

External Proxy Settings 界面详解

image.png

  1. Use external proxy servers

    • 功能:启用外部代理服务器。勾选此选项后,Charles 将通过指定的外部代理服务器访问网络。
    • 用途:在网络访问受限或需要通过某个代理服务器上网时启用此选项。
  2. Select a protocol to configure

    • Web Proxy (HTTP) :配置 HTTP 代理。
    • Secure Web Proxy (HTTPS) :配置 HTTPS 代理。
    • SOCKS Proxy:配置 SOCKS 代理(支持 SOCKS4 和 SOCKS5)。
    • 用途:根据网络要求选择合适的代理类型,Charles 会根据所选的协议进行代理配置。
  3. Web Proxy Server 配置

    • Domain / IP:填写外部代理服务器的域名或 IP 地址。
    • Port:填写代理服务器的端口号。
    • Proxy server requires a password:如果代理服务器需要认证,勾选此选项并填写 Domain(仅限 Windows 认证)、UsernamePassword
    • 用途:通过输入正确的代理服务器地址、端口和认证信息,确保 Charles 可以通过指定的外部代理服务器访问网络。
  4. Bypass external proxies for the following hosts

    • 功能:指定不通过外部代理的主机和域名。在此处填写的主机和域名会直接通过网络连接,而不会走外部代理。
    • 用途:适用于不希望经过外部代理的特定站点,比如内网资源或敏感网站。
  5. Always bypass external proxies for localhost

    • 功能:始终绕过外部代理访问 localhost。
    • 用途:避免本地服务被重定向到外部代理,确保 Charles 可以直接访问本地资源。
  6. Import 和 Export

    • Import:导入外部代理配置,便于加载预设的代理设置。
    • Export:导出当前的代理配置,便于在其他 Charles 实例或设备上复用相同的外部代理设置。
使用场景
  • 公司内网环境:在公司内网中,很多情况下访问外网需要通过一个统一的代理服务器,可以通过此设置让 Charles 使用公司代理连接外网。
  • 多层代理配置:如果 Charles 需要通过另一层代理访问互联网,可以通过此功能设置外部代理。
  • 选择性绕过代理:通过设置绕过的主机或域名,避免不必要的流量通过外部代理,提升网络访问效率。

External Proxy Settings 功能非常灵活,帮助用户在多代理环境中灵活配置网络连接,以便在不同的网络需求下正确捕获和分析流量。


Web Interface Settings(Web 界面设置)

Web Interface Settings(Web 界面设置)是 Charles 提供的一个选项,允许用户通过 Web 浏览器远程控制 Charles。当 Charles 运行时,可以通过浏览器访问 http://control.charles/ 查看 Charles 的抓包数据和设置。这对于需要在不同设备上查看 Charles 数据的用户非常方便,尤其是在多设备调试时。

Web Interface Settings 界面详解

image.png

  1. Enable web interface

    • 功能:启用 Web 界面。勾选此选项后,Charles 会启动一个 Web 服务,用户可以通过浏览器访问和控制 Charles。
    • 用途:在不同设备上访问 Charles,适合在远程或多设备环境中监控和管理抓包流量。
  2. Allow anonymous access

    • 功能:允许匿名访问。勾选此选项后,不需要登录凭证即可访问 Web 界面。
    • 用途:在不需要严格控制访问权限的环境下,匿名访问可以方便快捷地查看 Charles 数据。
  3. 用户列表(Username 和 Password)

    • 功能:添加或移除访问 Web 界面的用户及其登录凭证。点击 Add 可以添加一个新用户,设置用户名和密码以控制访问权限。
    • 用途:适合在需要限制访问权限的场景中使用,通过用户名和密码保护 Web 界面,确保只有授权用户能够查看和控制 Charles。
  4. Import 和 Export

    • Import:导入用户配置,便于加载预设的访问控制设置。
    • Export:导出当前用户配置,便于在其他 Charles 实例或设备上复用相同的访问控制。
使用场景
  • 远程监控和控制:在调试需要跨设备(如桌面、移动设备)进行时,Web 界面允许用户在任意设备上通过浏览器查看和控制 Charles。
  • 限制访问权限:通过设置用户名和密码,确保只有授权人员可以访问和操作 Charles 的 Web 界面。
  • 快速访问:对于开放的测试环境,可以启用匿名访问,让测试团队成员快速查看流量数据,而不需要每次输入凭证。

Web Interface Settings 为 Charles 提供了远程访问和控制的能力,特别适合需要跨设备调试和多人协作的环境。通过灵活的访问控制设置,可以在保证安全的同时方便地共享抓包数据。


Tools菜单

No Caching Settings(禁用缓存)

No Caching Settings(禁用缓存设置)是 Charles 中主要用于禁用客户端缓存,以确保每次请求都能从服务器获取最新的数据。禁用缓存在调试和测试时非常重要,特别是在需要查看实时响应或测试缓存策略的时候,避免因缓存导致的内容不更新问题。

No Caching Settings 功能详解
  1. 启用 No Caching

    • 功能:当启用 No Caching 功能时,Charles 会自动在请求头中添加 Cache-Control: no-cachePragma: no-cache 等字段,强制浏览器或客户端跳过缓存,直接从服务器获取最新的数据。
    • 用途:这对于需要频繁查看实时数据的场景非常有帮助,确保每次请求获取的都是最新内容,而不是缓存的数据。例如,当后端接口更新后,可以通过禁用缓存来测试最新的接口响应。
  2. 适用范围

    • No Caching 功能通常会影响所有经过 Charles 代理的请求。
    • 一旦启用 No Caching,所有请求将会自动带上 no-cache 的设置,直至用户手动关闭此选项。
  3. 使用场景

    • 前端开发调试:在调试 Web 或移动应用时,需要确保页面或接口返回的数据是实时更新的,避免因缓存导致的问题。
    • 测试缓存策略:禁用缓存功能有助于测试服务器的缓存策略,确保服务器能正确处理 no-cache 等请求头。
    • 验证接口更新:当后端接口或资源发生变化时,通过禁用缓存可以强制获取最新的接口响应,便于验证接口是否按预期更新。
如何启用 No Caching
  1. 在 Charles 中,点击 Tools > No Caching...
  2. 勾选 No Caching 选项。
  3. 之后,所有经过 Charles 的请求都会自动添加 no-cache 的请求头,避免缓存干扰调试和测试。
注意事项
  • 临时性设置:在调试完实时请求后,建议关闭 No Caching 功能,以避免对其他请求造成影响。
  • 对缓存策略的影响:禁用缓存会直接影响所有经过 Charles 的请求,因此在不需要实时更新数据时,应关闭该功能以提升网络请求效率。

No Caching Settings 是 Charles 提供的一个实用工具,帮助开发者在调试和测试过程中获取最新的服务器响应,避免缓存带来的数据滞后问题。


Block Cookies Settings(禁用 Cookie)

Block Cookies Settings(禁用 Cookie 设置)是 Charles 用于在调试过程中禁用 Cookie。启用该功能后,Charles 会拦截并阻止所有请求和响应中的 Cookie,确保不会传递 Cookie 数据。这在测试无状态请求或避免身份验证干扰的场景中非常有用。

Block Cookies Settings 功能详解
  1. 启用 Block Cookies

    • 功能:当启用 Block Cookies 功能后,Charles 将拦截请求和响应中的所有 Cookie,避免它们被发送或接收。
    • 用途:在调试时禁用 Cookie 可以模拟无状态的请求,测试应用在没有会话信息的情况下的行为。这适用于检查应用的首次访问、未登录状态下的页面表现等情况。
  2. 适用范围

    • 启用 Block Cookies 后,Charles 会自动阻止所有请求头中的 Cookie 和响应头中的 Set-Cookie 字段。
    • 该功能对经过 Charles 的所有流量生效,直到用户手动关闭该选项。
  3. 使用场景

    • 测试无状态请求:在需要模拟新用户请求或未登录状态的情况下,可以禁用 Cookie 以避免会话信息的干扰。
    • 调试身份验证:在测试登录和登出流程时,可以禁用 Cookie 来确保应用能够正确识别无会话状态。
    • 验证页面的首次加载:当需要测试页面在首次加载或未记录会话状态时的表现,禁用 Cookie 可以确保不使用任何存储的身份信息。
如何启用 Block Cookies
  1. 在 Charles 中,点击 Tools > Block Cookies...
  2. 勾选 Block Cookies 选项。
  3. 启用后,所有经过 Charles 的请求将不会传递任何 Cookie 数据,确保请求和响应中没有 Cookie 信息。
注意事项
  • 测试时选择性使用:禁用 Cookie 会影响正常的会话管理,因此在调试完无状态请求后,建议及时关闭该功能,以恢复正常的 Cookie 传递。
  • 影响登录状态:如果应用依赖于 Cookie 进行会话管理,禁用 Cookie 后将无法维持登录状态。此功能适合在需要测试无会话状态的情况时使用。

Block Cookies Settings 是一个非常实用的功能,特别适合在无状态测试或登录测试中使用,帮助开发者排除 Cookie 带来的状态影响,更加精确地验证应用的不同状态下的表现。


Map Remote Settings(远程映射)

Map Remote Settings(远程映射设置)是 Charles 允许用户将本地请求重定向到不同的远程服务器或路径。通过设置远程映射,用户可以将请求从一个地址“映射”到另一个地址,而不需要修改客户端代码。这在调试和测试过程中非常实用,尤其是在需要测试不同环境或切换 API 服务器时。

Map Remote Settings 功能详解
  1. Map Remote 的基本功能

    • 功能:Map Remote 允许用户将指定的请求映射到不同的服务器地址或路径。例如,可以将请求 https://api.production.com/v1 映射到 https://api.staging.com/v1
    • 用途:在开发和测试中,这个功能让用户可以轻松地切换请求的目标服务器,而不需要在代码中进行修改。适用于测试生产环境与测试环境之间的切换或不同 API 版本的对比测试。
  2. 配置 Map Remote 规则

    • Host:指定需要映射的源主机名(例如 api.production.com)。只有来自该主机的请求会被映射。
    • Port:指定源服务器的端口号(如 80、443)。不填则适用于所有端口。
    • Path:指定需要映射的路径(如 /v1/resource)。可以使用通配符 * 匹配所有路径。
    • Map to:填写目标服务器的主机名和端口(例如 api.staging.com:443),以及目标路径。例如可以将 /v1/resource 映射到 /v2/resource
    • 用途:配置这些参数后,Charles 会自动将符合条件的请求重定向到目标地址,实现不同服务器或路径的灵活切换。
  3. 使用场景

    • 切换环境:可以将请求从生产环境重定向到测试环境或开发环境,方便在不同环境中测试应用的表现。
    • API 版本测试:在测试 API 版本更新时,可以将请求映射到新的 API 路径,以便在保持客户端代码不变的情况下,验证新版本的接口。
    • 模拟远程资源:将请求重定向到本地服务器,模拟远程资源,方便在本地调试和开发。
如何配置 Map Remote
Map Remote Settings 界面选项

image.png

  1. Enable Map Remote

    • 功能:启用远程映射。如果勾选此选项,Charles 会将符合条件的请求映射到指定的目标地址。
    • 用途:在配置完映射规则后,勾选此项可激活映射功能,使所有符合条件的请求按照设定的映射规则进行重定向。
  2. From 和 To 列表

    • From 列:显示需要映射的原始地址(包括主机名、端口、路径等)。
    • To 列:显示目标地址,即请求将被映射到的地址。
    • 用途:用户可以在列表中查看已设置的映射规则,从而了解每条请求将被重定向到的目标位置。
  3. Add 和 Remove 按钮

    • Add:添加新的映射规则。点击 Add 按钮后,可以输入要映射的原始地址(From)和目标地址(To)。
    • Remove:删除选中的映射规则。如果不再需要某个映射,可以将其从列表中移除。
    • 用途Add 按钮用于新增规则,Remove 按钮则用于移除不再需要的规则。
  4. Up 和 Down 按钮

    • 功能:在列表中上下移动选中的映射规则。Charles 会按顺序匹配映射规则,优先匹配列表顶部的规则。
    • 用途:在有多个映射规则的情况下,可以通过调整顺序来控制 Charles 的匹配优先级。
  5. Import 和 Export 按钮

    • Import:导入映射规则,可以快速加载之前保存的映射配置。
    • Export:导出当前的映射规则,以便在其他 Charles 实例或设备上复用相同的映射设置。
    • 用途:便于保存和共享映射配置,特别适合在多个项目中使用相同的映射规则。
Add/Edit Mapping 界面选项详解

image.png

Map From(源地址)

这是请求的原始地址,即需要被重定向的请求位置。具体选项如下:

  1. Protocol:选择请求的协议类型(例如 httphttps)。这是 Charles 用于匹配请求的协议条件。
  2. Host:输入原始请求的主机名(例如 api.example.com)。只会对来自该主机的请求进行映射。
  3. Port:输入原始请求的端口号(如 80443)。不填则适用于所有端口。
  4. Path:指定请求路径(例如 /v1/resource)。支持使用 * 作为通配符,表示匹配该路径下的所有子路径。
  5. Query:指定请求的查询参数(例如 id=123)。此项可以进一步缩小请求的匹配范围,仅对符合指定查询参数的请求进行映射。
Map To(目标地址)

这是请求的目标地址,即映射后的请求将会重定向到的地址。

  1. Protocol:设置目标请求的协议类型(例如 httphttps)。
  2. Host:输入目标主机名(例如 api.staging.com),所有符合源地址条件的请求将被重定向到此主机。
  3. Port:目标请求的端口号(如 80443),可以根据目标服务器的端口配置填写。
  4. Path:目标路径(例如 /v2/resource),可以指定为不同的路径,支持使用 * 通配符来匹配子路径。
  5. Query:目标查询参数。可设置成与源地址不同的查询参数,进一步控制映射后的请求格式。
Preserve host in header fields
  • 功能:保持原始请求头中的主机字段不变。如果勾选该选项,Charles 将保留源请求中的主机字段,而不会将其替换为目标主机字段。
  • 用途:在测试或调试时,保留源主机字段可以帮助服务器识别请求的来源,避免某些 API 或服务由于主机名更改而拒绝请求。
使用场景
  • 切换环境:例如,将生产环境的请求 https://api.production.com/v1 映射到测试环境 https://api.staging.com/v1
  • 测试 API 版本更新:例如,将旧版本请求 https://api.example.com/v1 映射到新版本 https://api.example.com/v2,以便测试新版本 API 的响应。
  • 模拟路径重定向:通过不同的路径配置,测试应用在请求不同路径下资源时的表现。
操作步骤
  1. Map From 部分填入源地址信息,包括协议、主机、端口、路径和查询参数。
  2. Map To 部分填入目标地址信息。
  3. 勾选 Preserve host in header fields(如果需要保持源主机字段)。
  4. 点击 OK 确认。配置完成后,符合 Map From 条件的请求将会自动重定向到 Map To 地址。

通过这个界面,用户可以灵活地设置请求的重定向规则,使得 Charles 能够轻松地在不同服务器和路径之间切换请求流向。

注意事项
  • 选择性配置:Map Remote 是全局设置,一旦配置后将影响所有符合条件的请求。因此,使用完毕后应及时移除或禁用,以免影响其他请求。
  • 适用 HTTPS:对于 HTTPS 请求,确保目标服务器的 SSL 配置兼容,并已在 Charles 中配置 SSL Proxying,才能正确解密和映射 HTTPS 请求。
  • 结合其他调试工具使用:在与 RewriteBreakpoint 等其他调试工具结合使用时,Map Remote 可以灵活切换不同环境,以便对比测试和快速验证。

Map Remote Settings 是 Charles 提供的强大映射工具,允许用户在不同服务器和路径之间灵活切换,适合多环境测试、API 版本对比和远程资源模拟,是开发和测试过程中的一大便利。


Map Local Settings(本地映射)

Map Local Settings(本地映射设置)可以将特定的远程请求映射到本地文件。通过本地映射,用户可以使用本地文件来响应来自指定远程服务器的请求。这在测试和开发过程中非常有用,尤其是在调试静态资源或模拟服务器响应时,无需频繁访问远程服务器。

Map Local Settings 界面详解
主界面选项

image.png

  1. Enable Map Local

    • 功能:启用本地映射。勾选此选项后,Charles 将根据设定的映射规则,将符合条件的请求重定向到本地文件。
    • 用途:适用于需要使用本地资源模拟远程服务器响应的场景。启用后,符合条件的请求将使用本地文件内容响应。
  2. Location 和 Local Path 列表

    • Location:显示需要映射的远程位置(包括协议、主机名、端口、路径等)。
    • Local Path:显示本地文件路径,即该远程请求将被映射到的本地文件或目录。
    • 用途:用户可以在列表中查看和管理已设置的本地映射规则。
  3. Add 和 Remove 按钮

    • Add:添加新的本地映射规则。点击 Add 按钮后,会打开 Edit Mapping 界面,用户可以在其中配置详细的映射条件。
    • Remove:删除选中的映射规则,取消不再需要的本地映射。
  4. Up 和 Down 按钮

    • 功能:在列表中上下移动映射规则的顺序。Charles 会按顺序匹配映射规则,优先匹配列表顶部的规则。
  5. Import 和 Export 按钮

    • Import:导入本地映射规则,可以快速加载之前保存的映射配置。
    • Export:导出当前的映射规则,以便在其他 Charles 实例或设备上复用相同的映射设置。
Edit Mapping 界面选项(添加或编辑映射)

image.png

  1. Map From(源地址)

    • Protocol:选择远程请求的协议类型(如 httphttps)。
    • Host:输入远程请求的主机名(例如 api.example.com),只对该主机的请求进行本地映射。
    • Port:指定远程服务器的端口号(如 80443)。
    • Path:填写远程请求路径,可以使用 * 通配符表示子路径。
    • Query:指定请求的查询参数,用于进一步缩小匹配范围,仅对符合条件的请求进行映射。
  2. Map To(目标文件)

    • Local Path:选择本地文件路径,即用于响应请求的本地文件或目录。点击 Choose 按钮可以浏览选择本地文件。
    • Case-sensitive:启用大小写敏感,确保请求路径的大小写与本地文件路径一致。
使用场景
  • 静态资源调试:在本地调试 CSS、JS、图片等静态资源时,将这些资源映射到本地文件,使得请求不再依赖远程服务器。
  • 模拟服务器响应:在服务器未就绪或测试不同响应时,可以使用本地 JSON 文件来模拟接口响应,方便调试和开发。
  • 调试离线模式:在网络受限的环境下,可以通过本地映射提供必要的资源或响应,使得应用可以在离线模式下运行。
配置示例
  1. 勾选 Enable Map Local 以启用本地映射。
  2. 点击 Add,在 Map From 部分配置源地址(如 https://api.example.com/v1/data)。
  3. Map To 部分选择对应的本地文件路径,确保文件内容是预期的响应。
  4. 点击 OK 保存配置。符合条件的请求将直接从本地文件加载,而不是从远程服务器获取数据。

Map Local Settings 是 Charles 中一个灵活实用的功能,可以大幅度提升调试效率,帮助开发者在不依赖远程服务器的情况下测试和模拟请求响应。


Rewrite Settings(重写)

Rewrite Settings(重写设置)是 Charles 中的一项强大功能,用于在请求和响应通过 Charles 时动态修改它们的内容。通过重写规则,用户可以更改请求头、请求体、响应头和响应体,而无需更改客户端代码或服务器端配置。这在调试和测试不同的请求/响应场景时非常有用。

Rewrite Settings 界面选项详解

image.png

  1. Enable Rewrite

    • 功能:启用重写功能。勾选此选项后,Charles 会根据配置的重写规则对请求和响应进行修改。
    • 用途:在需要动态更改请求或响应内容的场景中开启该功能。例如,可以在测试环境中修改请求参数或模拟不同的服务器响应。
  2. Debug in Error Log

    • 功能:将重写调试信息输出到错误日志中。勾选此选项后,Charles 会在日志中记录重写过程,便于调试。
    • 用途:适合在重写规则配置复杂或遇到问题时使用,通过查看日志信息可以更容易定位问题。
  3. 规则列表

    • 显示所有已配置的重写规则。每条规则都包含修改请求或响应的条件。
    • 用途:用户可以在这里查看和管理已添加的重写规则,确保符合调试需求的规则生效。
  4. Add 和 Remove 按钮

    • Add:添加新的重写规则。点击后会进入详细的重写规则配置界面,用户可以在其中设置要修改的内容。
    • Remove:删除选中的重写规则。当不再需要某条规则时,可以将其移除。
  5. Import 和 Export 按钮

    • Import:导入重写规则配置,方便加载之前保存的规则。
    • Export:导出当前的重写规则配置,便于在其他 Charles 实例中复用相同的设置。
  6. 帮助按钮(问号图标)

    • 功能:提供关于 Rewrite Settings 的帮助信息,指导用户如何配置和使用重写功能。
使用场景
  • 修改请求头或响应头:可以在请求中添加、修改或删除请求头字段,模拟不同的请求环境,或修改响应头来控制缓存策略等。
  • 更改请求体或响应体内容:用于修改请求参数或响应内容,测试不同的输入输出场景。
  • 模拟错误或延迟响应:通过重写响应状态码或增加延迟,模拟服务器错误或网络延迟情况,以观察客户端的表现。
  • 替换资源内容:在调试静态资源时,可以重写请求路径,将资源指向其他路径或本地文件。
配置示例
  1. 点击 Add,进入详细的重写规则配置界面。
  2. 配置重写条件,比如选择要修改的请求 URL 或路径。
  3. 设置修改内容,例如更改请求头的字段或更改响应内容。
  4. 点击 OK 保存规则。此时,符合条件的请求或响应将按照配置的重写规则进行修改。
1. Edit Location 界面

image.png

Rewrite SettingsMap Local/Remote Settings 中,Edit Location 界面用于定义重写或映射的匹配条件。这里用户可以根据请求的各种属性进行过滤,以便 Charles 仅对符合条件的请求执行操作。

  • Protocol:选择匹配的协议(如 httphttps)。如果留空,表示不限制协议。
  • Host:指定目标主机(如 api.example.com)。留空则匹配所有主机。
  • Port:指定目标端口号(如 80443),不填写则匹配所有端口。
  • Path:指定请求路径,可以使用通配符 * 表示子路径。例如,/api/* 匹配所有 /api/ 下的路径。
  • Query:设置匹配的查询参数,用于更精确的条件匹配。

应用场景:例如,可以将 https://api.example.com/v1/* 的请求映射到本地,或仅对特定路径的请求进行重写。

2. Rewrite Rule 界面

image.png

Rewrite Settings 中,Rewrite Rule 界面允许用户配置具体的重写规则,包括如何匹配请求和响应内容,并替换指定的部分。

  • Type:指定重写的类型(如 Header、Body 等),可以针对请求的不同部分进行重写。
  • Where:选择作用于 Request(请求)还是 Response(响应)。
Match 区域
  • Name:匹配的字段名,例如要修改的 Header 名称。如果留空,则匹配所有名称。
  • Value:指定匹配的字段值,可以使用正则表达式(勾选 Regex)来匹配特定格式的值。
  • Match whole value:启用后,只有在字段值完全匹配时才会进行重写。
  • Case sensitive:是否区分大小写。
Replace 区域
  • NameValue:替换的字段名和值,用户可以指定替换名称和具体值。
  • Replace firstReplace all:选择替换第一次出现的匹配项,还是替换所有匹配项。

应用场景:例如,可以修改请求的 User-Agent 字段值,或对响应内容进行特定文本替换,以便观察客户端如何处理不同的响应。


Black List Settings(黑名单)

Black List Settings(黑名单设置)是 Charles 中用于阻止指定的请求。将特定的 URL、主机或路径加入黑名单后,Charles 会自动拒绝这些请求,使客户端无法访问它们。这在调试和测试中非常有用,可以模拟网络不可达或资源被屏蔽的情况。

功能和用法
  • 功能:阻止特定的请求,使其不会通过 Charles 代理。这些请求会被 Charles 拒绝,客户端将无法获得响应。

  • 用法

    1. 在 Charles 的 Tools > Black List... 菜单中打开设置。
    2. 点击 Add 添加新的黑名单条目,可以设置特定的协议、主机、端口和路径。
    3. 保存后,Charles 会自动拦截符合条件的请求,返回错误信息给客户端。
使用场景
  • 模拟服务器宕机:可以将服务器 URL 添加到黑名单,模拟服务器不可达的情况,测试客户端在无响应时的表现。
  • 调试网络请求失败处理:通过阻止某些请求,观察应用如何处理失败的网络请求,便于调试错误处理逻辑。
  • 屏蔽广告或跟踪请求:将广告或跟踪请求的 URL 加入黑名单,可以屏蔽这些请求,提升应用体验或测试无广告情况下的加载效果。

Allow List Settings(允许列表设置)

Allow List Settings(允许列表设置)是 Charles 中用于精确控制请求访问权限的功能。与黑名单相反,允许列表功能仅允许特定的请求通过,其他所有请求都会被阻止。这在需要严格限制网络请求的场景中非常有用,比如只想监控某些特定的 API 请求,或模拟只允许访问某些资源的网络环境。

功能和用法
  • 功能:仅允许指定的请求通过 Charles,其他所有不在允许列表中的请求将被自动阻止。

  • 用法

    1. 打开 Charles 的 Tools > Allow List... 菜单,进入设置界面。
    2. 点击 Add 添加新的允许列表条目,可以设置特定的协议、主机、端口和路径。
    3. 保存设置后,只有符合条件的请求可以通过,其他请求会被拒绝。
使用场景
  • 限制请求范围:在调试时,只允许某些关键请求通过,以便更专注于特定 API 的流量监控。
  • 模拟受限网络环境:测试应用在有限网络条件下的表现,例如模拟应用只能访问某些 API,而其他资源不可用的情况。
  • 提升抓包效率:在网络流量很大时,可以通过允许列表限制请求范围,减少不必要的流量,便于集中精力分析特定请求。

DNS Spoofing Settings(DNS 欺骗)

DNS Spoofing Settings(DNS 欺骗设置)是 Charles 中用于将指定的域名解析到不同的 IP 地址。通过这个功能,开发者可以模拟不同的 DNS 解析结果,将请求重定向到指定的服务器或 IP 地址,而不需要修改本地系统的 DNS 配置。这在测试环境中非常有用,尤其是当需要在不同服务器之间切换请求时。

功能和用法
  • 功能:将指定的域名解析到用户设置的 IP 地址,而不是正常的 DNS 服务器解析结果。这样可以将某个域名请求重定向到指定的服务器。

  • 用法

    1. 打开 Charles 的 Tools > DNS Spoofing... 菜单,进入设置界面。
    2. 点击 Add 添加新的 DNS 欺骗条目,输入需要欺骗的域名和对应的目标 IP 地址。
    3. 保存后,Charles 会将符合条件的域名解析重定向到指定 IP 地址。
使用场景
  • 测试服务器切换:当需要测试不同环境的服务器时,可以通过 DNS Spoofing 将特定域名解析到不同的 IP 地址,便于快速切换服务器。
  • 本地开发测试:将域名重定向到本地服务器 IP,用于在本地开发环境中测试上线后的效果,而不需要修改客户端代码。
  • 绕过 DNS 缓存:可以使用该功能快速更改域名的解析结果,避免本地 DNS 缓存带来的延迟问题,实时测试新的解析结果。

Mirror Settings(镜像)

Mirror Settings(镜像设置)是 Charles 中用于将所有网络请求的流量镜像到另一台服务器或目标地址。启用此功能后,每次请求都会被 Charles 同时发送到原始服务器和指定的镜像服务器。这在测试和监控中非常有用,可以帮助开发者实时检查请求的数据和行为,而不影响实际请求的响应。

功能和用法
  • 功能:将请求和响应流量复制并发送到指定的镜像服务器,便于分析和监控请求流量。

  • 用法

    1. 打开 Charles 的 Tools > Mirror... 菜单,进入镜像设置界面。
    2. 点击 Add 添加新的镜像条目,配置需要镜像的主机、端口和路径,并设置镜像的目标服务器地址。
    3. 启用镜像设置后,Charles 会自动将符合条件的流量复制并发送到目标地址。
使用场景
  • 实时监控和分析:可以将请求流量镜像到一个专门用于监控的服务器,分析请求行为和数据,而不影响真实用户的请求。
  • 测试负载和响应:可以在不影响实际服务器的前提下,将流量镜像到测试服务器,以观察服务器在高流量情况下的表现。
  • 调试和日志记录:通过镜像请求到日志服务器,便于调试和记录所有请求的详细信息。

Mirror Settings 是 Charles 中用于复制和重定向请求流量的工具,非常适合在需要进行流量监控、负载测试或调试日志记录时使用。这个功能确保了请求被同时发送到多个地址,为开发和测试提供了更灵活的选择。


Auto Save Settings(自动保存)

Auto Save Settings(自动保存设置)是 Charles 中用于定期自动保存网络请求的记录。启用此功能后,Charles 会按照设置的时间间隔将当前会话的数据保存到指定位置。这对于长时间运行的调试或需要保留所有请求记录的场景非常有用,避免因意外关闭或程序崩溃而丢失数据。

功能和用法
  • 功能:自动保存 Charles 会话数据到本地文件夹,并按照设定的时间间隔进行更新。

  • 用法

    1. 打开 Charles 的 Tools > Auto Save... 菜单,进入自动保存设置界面。
    2. 勾选 Enable Auto Save 启用自动保存功能。
    3. 设置保存的文件路径和保存频率(例如每 5 分钟保存一次)。
    4. 配置完成后,Charles 会按照指定的频率将会话记录自动保存到设置的文件夹中。
使用场景
  • 长时间调试或监控:在需要长时间记录请求时,自动保存功能可以确保数据不会因 Charles 关闭或崩溃而丢失。
  • 错误追踪:在调试复杂的网络请求时,自动保存会话记录便于回溯,帮助发现和分析错误。
  • 日志归档:在需要保存所有请求记录以供以后分析的场景下,可以启用自动保存功能定期归档日志数据。

Auto Save Settings 是 Charles 中用于自动保存请求会话的实用工具,帮助用户在长时间调试或监控时保留所有的请求和响应记录,确保数据完整性。


Client Process Settings(客户端进程)

Client Process Settings(客户端进程设置)是 Charles 中用于识别和过滤特定客户端进程的网络请求。通过此设置,用户可以选择只捕获来自某些应用程序或进程的流量,而忽略其他不相关的流量。这在只想关注特定应用程序请求的场景中非常有用,尤其是在多进程环境下,可以帮助开发者更精确地监控和分析所需的网络请求。

功能和用法
  • 功能:识别并过滤来自特定客户端进程的网络流量,允许 Charles 只记录和显示指定应用程序或进程的请求。

  • 用法

    1. 打开 Charles 的 Tools > Client Process... 菜单,进入客户端进程设置界面。
    2. 配置 Charles 仅捕获来自特定进程(应用程序)的流量,可以手动选择或指定进程 ID。
    3. 启用设置后,Charles 会过滤掉所有其他进程的请求,只保留来自选定进程的网络流量。
使用场景
  • 特定应用调试:在调试一个应用程序时,可以通过此设置过滤掉其他应用的请求,只捕获目标应用的网络流量,减少干扰。
  • 多进程环境下的流量监控:在开发和测试多进程或多应用的系统时,可以选择性地监控不同进程的网络请求,帮助识别每个进程的具体行为。
  • 性能优化和问题诊断:通过过滤非目标进程的流量,可以更清晰地了解目标应用的请求情况,从而更好地进行性能优化和问题分析。

Compose / Compose New...(组合请求)

Compose(组合请求)允许用户手动创建并发送自定义的 HTTP 请求。通过 Compose 功能,用户可以编辑请求的 URL、方法、头信息和请求体,直接向服务器发送该请求,并查看响应。这在测试特定 API 接口、验证服务器响应或进行手动调试时非常有用。

功能和用法
  • 功能:手动创建并发送自定义的 HTTP 请求,以测试特定接口的响应或模拟特定请求。

  • 用法

    1. 打开 Charles 的 File > Compose 或使用快捷键调出 Compose 界面。
    2. 输入请求的 URL、选择请求方法(GET、POST、PUT 等),并设置请求头和请求体。
    3. 点击发送请求,Charles 会将请求发送到指定服务器,并在结果区域显示服务器的响应。
使用场景
  • 测试 API 接口:可以手动构造请求,测试 API 的不同参数组合和响应情况。
  • 模拟客户端请求:在不使用客户端应用的情况下,直接发送请求,验证服务器的行为。
  • 调试网络问题:通过自定义请求内容,可以方便地排查和定位网络问题。

Repeat(重复请求)

Repeat(重复请求)用于自动重复发送指定的请求。通过 Repeat 功能,用户可以快速重新发送选定的请求,观察服务器的响应,或测试服务器在短时间内处理多个相同请求的能力。这在调试、负载测试和观察服务器稳定性时非常有用。

功能和用法
  • 功能:重复发送一次或多次指定的请求,帮助用户在不需要重新构建请求的情况下,快速验证响应和调试。

  • 用法

    1. 选择需要重复发送的请求。
    2. 在右键菜单中选择 Repeat,Charles 会立即再次发送该请求并显示响应。
    3. 可以选择 Advanced Repeat 进行更高级的设置,控制重复的次数和时间间隔,以便模拟负载或压力测试。
使用场景
  • 快速验证响应:在调整服务器配置或代码后,使用 Repeat 功能快速重新发送请求,验证响应的变化。
  • 测试服务器稳定性:通过多次重复请求,观察服务器的性能和稳定性,检测是否会出现错误或延迟。
  • 负载测试:使用 Advanced Repeat 可以在短时间内发送大量请求,测试服务器的负载能力。

Repeat 功能帮助用户轻松重复网络请求,适合在调试和测试中需要多次验证同一请求响应的情况,是一个简单而实用的工具。


Advanced Repeat(高级重复)

Advanced Repeat(高级重复)用于更精细地控制请求的重复发送。与普通的 Repeat 功能相比,Advanced Repeat 允许用户设置请求的重复次数和时间间隔,从而模拟高频请求场景、进行负载测试,或者观察服务器在特定请求频率下的响应和性能。

功能和用法
  • 功能:控制请求的重复发送频率,包括重复的次数和每次发送之间的间隔,以便模拟不同的请求压力或流量模式。

  • 用法

    1. 选择需要重复的请求。
    2. 右键点击请求,选择 Advanced Repeat 选项。
    3. 设置重复的次数(例如发送 100 次)和时间间隔(例如每隔 500 毫秒发送一次)。
    4. Charles 会按设定的频率发送请求,并显示每次请求的响应。
使用场景
  • 负载测试:通过设置高频重复请求,模拟大量并发请求,观察服务器的响应时间、错误率等性能指标。
  • 压力测试:测试服务器在高请求量情况下的稳定性,例如是否会发生超时或崩溃。
  • 监控响应稳定性:通过有间隔的重复请求,可以观察服务器在长时间内是否保持一致的响应。

Advanced Repeat 是一个非常实用的功能,适用于需要在受控环境下测试服务器性能和负载能力的场景,使得 Charles 能够模拟真实的流量模式,帮助开发和测试人员分析服务器的响应情况。


Validate(验证)

Validate(验证)是 Charles 中用于检查选定请求的响应内容是否符合特定的标准或格式。这可以帮助开发人员快速验证服务器响应的正确性,例如检查响应是否符合预期的状态码、内容格式,或是否包含特定的字段信息。在调试 API 接口和数据完整性时,这项功能非常有用。

功能和用法
  • 功能:验证选定请求的响应,确保返回的数据符合预期条件,例如 JSON 格式的完整性、HTTP 状态码的正确性等。

  • 用法

    1. 选择需要验证的请求,右键点击并选择 Validate
    2. Charles 会根据预定义的规则检查响应内容,并提供验证结果,指出是否通过验证,以及任何可能的错误或不匹配项。
使用场景
  • API 数据格式验证:检查 JSON、XML 等数据格式是否正确,确保 API 响应数据的结构符合前端或客户端要求。
  • 错误诊断:通过验证,可以更快定位数据不匹配或格式错误的问题,帮助排查数据传输中的错误。
  • 数据完整性检查:当数据包含重要字段时,使用 Validate 功能可以检查响应中是否包含所有必需字段,以确保数据完整性。

Validate 功能是 Charles 中的一个辅助调试工具,适用于在接口调试和数据完整性检查时使用,可以更快发现数据格式和内容上的问题,提升 API 调试效率。


Publish Gist(发布要点)

Publish Gist(发布要点)用于将请求或会话数据发布到 GitHub 的 Gist 服务中。Gist 是 GitHub 提供的一个轻量级代码和文本片段分享平台,Charles 的 Publish Gist 功能让用户可以快速将调试信息上传到 Gist,方便分享或保存请求内容。这在团队协作和问题报告中非常有用。

功能和用法
  • 功能:将选定的请求数据发布到 GitHub Gist,以便分享或存储调试信息。

  • 用法

    1. 选择要发布的请求或会话数据。
    2. 右键点击并选择 Publish Gist
    3. 输入 GitHub 账户信息(如果需要),Charles 会将数据上传并生成 Gist 链接。
    4. 用户可以将生成的链接分享给其他人,便于团队查看请求信息。
使用场景
  • 团队协作:当遇到网络请求问题时,可以将请求数据发布到 Gist,分享给团队成员,方便他们查看和分析问题。
  • 错误报告:在向后端或第三方服务提交错误报告时,可以附上请求的 Gist 链接,以便他们获得详细的请求数据。
  • 代码片段保存:用于存储和归档请求内容,便于日后参考或复用。

Import/Export Settings(导入/导出)

Import/Export Settings(导入/导出设置)用于将 Charles 的配置导出为文件或从文件导入配置。这可以帮助用户在不同的设备或项目之间共享 Charles 的设置,包括代理规则、映射设置、重写规则等。该功能非常适合团队协作或多设备同步配置,确保调试环境一致。

功能和用法
  • 功能:导出当前 Charles 的配置,生成一个包含所有设置的文件,或者从文件导入配置,将之前的设置恢复到当前环境。

  • 用法

    1. 在 Charles 的 File > Import SettingsFile > Export Settings 中选择导入或导出。
    2. Export Settings 会将当前的配置保存为文件(通常是 .chls 格式),用于备份或共享。
    3. Import Settings 会从文件导入配置,并覆盖当前的设置,加载其他 Charles 环境的规则和配置。
使用场景
  • 团队协作和共享:在团队中共享代理配置、重写规则、映射规则等,确保每个人的调试环境一致。
  • 多设备配置同步:当在多个设备上使用 Charles 时,可以通过导出配置文件并导入到其他设备,保持相同的设置。
  • 备份和恢复设置:在进行重大配置更改之前,可以先导出当前配置作为备份,以便在遇到问题时快速恢复。

Profiles(配置)

Profiles(配置)用于创建和管理不同的配置文件。通过 Profiles,用户可以保存和切换不同的 Charles 设置,包括代理规则、映射规则、重写规则等。这在需要频繁切换不同的调试环境或测试场景时非常有用,因为可以快速加载预设的配置文件,而无需手动更改设置。

功能和用法
  • 功能:创建、保存和切换多个配置文件,每个配置文件包含一套完整的 Charles 设置。

  • 用法

    1. 在 Charles 的 File > Profiles 菜单中,选择 New Profile 创建新的配置文件,或选择已保存的配置文件进行切换。
    2. 每个配置文件可以独立保存一组 Charles 设置(例如代理规则、映射规则等)。
    3. 用户可以在不同的配置文件之间快速切换,以加载适用于当前调试环境的设置。
使用场景
  • 多项目环境:当需要在多个项目中调试时,可以为每个项目创建独立的配置文件,分别保存项目的特定设置,便于快速切换。
  • 不同测试场景:在进行不同类型的测试(如性能测试、API 测试等)时,可以创建配置文件来分别保存不同的调试规则和设置。
  • 简化设置切换:在同一个设备上,用户可以根据不同需求快速切换配置,避免频繁手动更改设置,提高工作效率。

Publish Gist Settings(Gist 发布设置)

Publish Gist Settings(Gist 发布设置)用于配置将 Charles 会话数据发布到 GitHub Gist 时的相关设置。通过这些设置,用户可以管理 Charles 与 GitHub 的连接方式以及发布的 Gist 可见性选项等,方便用户根据需求自定义分享内容的权限。

功能和用法
  • 功能:配置 Charles 发布 Gist 的相关参数,包括是否公开发布以及 GitHub 账户的连接方式。

  • 用法

    1. 在 Charles 的 Tools > Publish Gist Settings... 中打开设置界面。
    2. 配置 GitHub 账号 信息,以便 Charles 通过授权来访问 Gist 服务。
    3. 选择发布的 可见性(公开或私有),以便控制发布内容的访问权限。
使用场景
  • 团队协作:可以将调试数据分享至团队,并根据需求选择公开或私有的 Gist,以便同事查看或协作调试。
  • 问题报告:在提交问题报告时,通过 Gist 发布 Charles 会话数据,帮助开发团队详细了解请求和响应内容。
  • 自定义隐私:用户可以根据场景需求设置 Gist 的可见性,确保敏感信息的安全。

Charles的主界面介绍以及菜单介绍大概就是上面那些了 接下来我们来操作Charles进行pc抓包和移动端抓包测试。

通过 Charles 进行 PC 端抓包

1. 开启系统代理

image.png

  • 启用系统代理:在 Charles 中,进入 Proxy 菜单,根据操作系统选择代理模式:

    • Mac:选择 macOS Proxy,Charles 会自动设置为 macOS 系统的全局代理。
    • Windows:选择 Windows Proxy,Charles 会自动设置为 Windows 系统的全局代理。
  • 作用:启用后,Charles 可以捕获系统内所有通过网络的请求,覆盖所有 PC 端的应用程序流量。

2. 抓取 HTTPS 请求

image.png

image.png

  • 安装 Charles 根证书

    • 首次抓取 HTTPS 流量时,Charles 需要 SSL 证书来解密 HTTPS 数据。进入 Help > SSL Proxying > Install Charles Root Certificate

    • 安装后,信任 Charles 根证书:

      • macOS:在“钥匙串访问”中找到 Charles 证书,右键设置为“始终信任”。
      • Windows:在“证书管理器”中安装并信任 Charles 根证书。
  • 配置 SSL 解密

    • 在 Charles 中进入 Proxy > SSL Proxying Settings,点击 Add 添加解密规则。
    • Host 填写 *Port 填写 443,表示对所有 HTTPS 请求进行解密。
  • 作用:启用这些设置后,Charles 能够解密和捕获 HTTPS 请求的数据内容。

3. 开始抓包

  • 点击工具栏上的 Record(红色圆点)按钮,开始记录网络流量。
  • Charles 会自动显示所有通过的请求,包括 HTTP 和 HTTPS 请求。

image.png

image.png

这样就可以了哈。

通过 Charles 进行移动端抓包

1. 设置 Charles 代理

  • 获取 Charles 的 IP 地址

    • 在 Charles 中,进入 Help > Local IP Address,查看当前设备的 IP 地址(例如 192.168.1.X)。

    • 记录此 IP 地址,因为稍后会在移动设备上配置它。

      image.png

      image.png

  • 在移动设备上设置代理

    1. 确保移动设备和 Charles 运行的电脑连接到同一 Wi-Fi 网络。

    2. 在移动设备的 Wi-Fi 设置中,找到当前连接的网络。

    3. 进入网络的 代理设置(通常在网络详情页中):

      • 设置代理类型为 手动
      • 服务器填写 Charles 的 IP 地址。
      • 端口填写 Charles 的代理端口(默认是 8888)。

我用的是Android Studio创建的模拟器 跟手机端差不多的 都是设置wifi代理

image.png

  • 验证连接

    • 打开 Charles,确保显示了来自移动设备的连接请求。如果出现 Allow/Deny 提示,选择 Allow,允许移动设备连接。(我已经验证过了 Charls会弹出这个提示框的 点击Allow就行)

2. 配置 HTTPS 抓包(SSL 证书安装)

  • 在移动设备上安装 Charles SSL 证书

    1. 在移动设备的浏览器中,访问 chls.pro/ssl或者charlesproxy.com/getssl(Charles 提供的证书下载链接)。

    2. 下载并安装 Charles 的 SSL 证书。

    3. 信任证书

      • iOS:在 设置 > 通用 > 关于本机 > 证书信任设置 中找到 Charles 证书并启用信任。
      • Android:证书安装完成后,进入 设置 > 安全,确保启用了证书信任(具体路径可能会根据设备有所不同)。
  • 启用 Charles 的 SSL 解密

    • 在 Charles 中,进入 Proxy > SSL Proxying Settings
    • 点击 Add,在 Host 中填写 *Port 填写 443,以便解密所有 HTTPS 流量。

3. 开始抓包

  • 启动抓包:在 Charles 中点击 Record(红色圆点)按钮。
  • Charles 会自动捕获移动设备上的 HTTP 和 HTTPS 请求。每个请求将显示在 Charles 界面上,您可以查看其详细信息,包括请求头、响应内容等。

image.png

image.png

这样我们就实现了pc端和移动端用Charles抓包的效果。 我也是好久没用了 刚好工作需要 所以重温一下Charls的用法。