Charles Proxy 介绍:网络抓包调试工具入门指南
前言:为什么我们需要网络抓包工具?
互联网的运作基于无数次的网络请求和响应。无论是你在浏览器中输入一个网址、手机应用加载数据,还是后台服务之间相互通信,背后都是数据包在网络中穿梭。作为开发者或测试人员,我们构建的应用或服务,其核心功能往往都依赖于这些网络交互。
然而,网络通信过程对于我们来说往往是一个“黑箱”。当出现问题时——比如应用无法加载数据、接口返回错误、页面加载缓慢——我们很难直观地知道究竟是哪个环节出了问题:是客户端请求发送有误?服务器返回了错误的响应?还是网络本身出现了问题?
这时,网络抓包调试工具就显得至关重要了。它们能够截获(抓取)应用与服务器之间传输的数据包,并以人类可读的方式展示出来,帮助我们“看清”网络通信的真相。通过分析这些抓取到的数据包,我们可以:
- 调试客户端应用: 检查应用发送的请求是否正确,包括URL、请求方法、请求头、请求体等。
- 调试服务器端接口: 查看服务器返回的响应是否符合预期,包括状态码、响应头、响应体。
- 定位网络问题: 判断是客户端、服务器还是网络延迟/连接问题导致了故障。
- 分析性能: 查看每个请求的耗时、大小,找出性能瓶颈。
- 了解第三方服务: 分析应用与第三方API(如支付、地图、广告SDK)的交互过程。
- 安全审计(初步): 查看敏感数据是否被加密传输。
市面上有许多网络抓包工具,如Wireshark(底层网络协议分析)、Fiddler(Windows平台常用)、mitmproxy(命令行工具)等。而 Charles Proxy 是其中一款功能强大、界面友好、跨平台(支持 macOS、Windows、Linux)且在 Web 和移动开发领域非常流行的工具。
本文将带你深入了解 Charles Proxy,从其基本概念到核心功能,手把手教你如何使用它进行网络抓包和调试。
Charles Proxy 是什么?
Charles Proxy 是一款 Web 调试代理(Web Debugging Proxy)工具。它的工作原理是充当你的设备(浏览器、应用)和互联网之间的代理服务器。所有从你的设备发出的网络请求,以及从互联网返回的响应,都会经过 Charles Proxy。Charles 就像一个“中间人”,能够记录、查看甚至修改这些流经它的数据。
Charles 主要关注 HTTP 和 HTTPS 协议的流量。它能够非常详细地显示每个请求及其对应的响应,包括:
- 请求的 URL、方法(GET, POST, PUT, DELETE 等)
- 请求头(Request Headers)
- 请求体(Request Body,如 POST 请求发送的数据)
- 响应状态码(Status Code,如 200 OK, 404 Not Found, 500 Internal Server Error 等)
- 响应头(Response Headers)
- 响应体(Response Body,如服务器返回的 HTML、JSON、XML 数据)
- 请求和响应的时间、大小、SSL 信息等
通过将 Charles 设置为系统的网络代理,所有符合条件的网络流量都会被它截获并显示在其界面上。
Charles Proxy 的核心功能概览
Charles Proxy 之所以受到开发者的青睐,在于其提供了一系列强大的功能,远不止简单的抓包:
- HTTP/HTTPS 流量抓取与显示: 这是最基本的功能,能够清晰地展示所有 HTTP 和 HTTPS 请求及响应的详细信息。
- SSL Proxying (HTTPS 解密): Charles 能够解密并查看原本加密的 HTTPS 流量。这是调试如今绝大多数 Web 和移动应用的关键功能。
- 流量过滤 (Filtering): 可以根据主机、路径、查询参数等条件过滤掉不关心的流量,只显示需要调试的部分。
- 断点 (Breakpoints): 允许在请求或响应到达特定断点时暂停,检查并修改请求或响应的数据,然后继续发送。这对于测试边界条件或模拟特定场景非常有用。
- 流量限速 (Throttling): 模拟慢速网络环境(如 GPRS, 3G, 拨号上网等),用于测试应用在低带宽或高延迟网络下的表现。
- 映射工具 (Mapping):
- Map Remote: 将某个请求重定向到另一个 URL。例如,将生产环境的 API 请求映射到开发或测试环境。
- Map Local: 将某个请求的响应重定向到本地文件。这可以用来模拟服务器响应,而无需启动一个真实的后端服务,非常适合前端开发和测试。
- 重写工具 (Rewrite): 允许定义规则来修改请求或响应的各个部分,如修改 URL、替换请求头/响应头、查找替换请求体/响应体中的文本等。比断点更自动化。
- 重复发送请求 (Repeat): 可以轻松地重复发送某个历史请求,用于快速测试接口或模拟多次相同的操作。
- 构造请求 (Compose): 可以基于历史请求创建一个新的请求,或者完全从头开始构造一个请求并发送,用于简单的接口测试。
- 性能分析 (Performance): 提供每个请求的详细时间线,帮助分析网络加载性能。
- 会话保存与导入: 可以将会话(抓取的流量数据)保存到文件,以后再加载分析,或分享给他人。
接下来,我们将详细介绍如何安装 Charles Proxy,以及如何利用上述核心功能进行实际的网络调试。
安装与基本设置
Charles Proxy 是一款商业软件,但提供免费试用版,每次启动后限制使用30分钟,之后会自动关闭,需要重新启动。对于学习和简单的调试来说,试用版已经足够。正式使用建议购买许可。
-
下载 Charles Proxy:
访问 Charles Proxy 官方网站:https://www.charlesproxy.com/
。
在下载页面找到对应你操作系统的版本(macOS, Windows, Linux)并下载。 -
安装 Charles Proxy:
- macOS: 下载的是一个
.dmg
文件,双击打开,将 Charles 应用拖拽到“Applications”文件夹即可。 - Windows: 下载的是一个
.msi
安装包,双击运行按照提示进行标准安装。 - Linux: 通常提供
.tar.gz
包,解压后运行其中的可执行文件。
- macOS: 下载的是一个
-
首次运行与系统代理设置:
首次运行 Charles Proxy 时,它通常会提示你是否将其设置为系统的 HTTP/HTTPS 代理。建议允许,这样 Charles 就能自动捕获你设备上的大部分网络流量(如浏览器)。- 在 macOS 上,Charles 会请求安装一个 Helper Tool 来自动配置系统代理,输入管理员密码即可。
- 在 Windows 上,Charles 会提示配置系统代理设置,通常选择“是”即可。
设置成功后,你的浏览器或其他使用系统代理设置的应用的网络流量就会开始出现在 Charles 的界面中。
-
安装 SSL 证书 (用于解密 HTTPS):
抓取 HTTP 流量比较简单,但现代应用绝大多数都使用 HTTPS 加密通信,直接抓取只能看到加密的乱码。要查看 HTTPS 请求和响应的具体内容,你需要让 Charles 成为这个加密连接的“中间人”,这需要安装并信任 Charles 的根证书。-
在你的电脑上安装证书 (用于抓取本机浏览器等流量):
- 打开 Charles。
- 在菜单栏选择
Help
->SSL Proxying
->Install Charles Root Certificate
。 - 系统会打开证书管理界面。根据你的操作系统指引,将 Charles Proxy 的根证书添加到系统的“受信任的根证书颁发机构”中。
- macOS: 会打开“钥匙串访问”,将证书拖到“系统”钥匙串中,然后双击证书,在“信任”选项里选择“始终信任”。
- Windows: 会打开证书导入向导,选择将证书放入“受信任的根证书颁发机构”存储,完成导入。
- Linux: 方法因发行版和桌面环境而异,通常需要在浏览器或系统设置中导入证书。
-
在手机或模拟器上安装证书 (用于抓取移动应用流量): 这是移动开发调试的常用场景。
- 首先,确保你的手机和运行 Charles 的电脑在同一个局域网内。
- 在手机的网络设置中,手动配置 Wi-Fi 的代理。代理的 IP 地址是运行 Charles 的电脑的局域网 IP 地址,端口号是 Charles 的默认代理端口(通常是 8888)。你可以在 Charles 的菜单栏
Help
->Local IP Address
中找到电脑的 IP。 - 在手机的浏览器中访问
chls.pro/ssl
。Charles 会自动导出一个证书文件供手机下载。 - 下载完成后,根据手机操作系统的指引安装并信任这个证书。
- Android: 通常在“设置”->“安全”->“加密与凭据”->“安装证书”->“CA 证书”中找到下载的证书文件进行安装。不同 Android 版本路径可能略有差异。
- iOS: 下载后在“设置”中会有提示安装描述文件,安装描述文件后,还需要在“设置”->“通用”->“关于本机”->“证书信任设置”中手动开启对 Charles 根证书的完全信任。
- 注意: 安装证书步骤因操作系统版本不同可能有较大差异,务必根据你手机的具体系统版本搜索详细的证书安装教程。部分应用可能会采用 SSL Pinning 技术,即使安装了 Charles 证书也无法抓取 HTTPS 流量,这属于更高级的对抗手段。
-
配置 Charles 开启 SSL Proxying:
- 在 Charles 中,选择菜单栏
Proxy
->SSL Proxying Settings...
。 - 在弹出的窗口中,勾选
Enable SSL Proxying
。 - 在下方的
Include
列表中,点击Add
按钮,添加你需要解密的域名和端口。例如,如果要解密所有域名的 HTTPS 流量,可以填写Host: *
,Port: 443
。如果你只关心特定域名的流量,就填写具体的域名,如Host: api.example.com
,Port: 443
。 - 点击
OK
保存设置。
- 在 Charles 中,选择菜单栏
完成以上证书安装和 SSL Proxying 设置后,Charles 就能开始解密并显示指定域名的 HTTPS 流量了。
-
Charles Proxy 用户界面介绍
Charles Proxy 的界面主要分为几个区域:
- 菜单栏 (Menu Bar): 提供各种功能选项,如文件、编辑、视图、代理、工具、帮助等。
- 工具栏 (Toolbar): 提供常用功能的快捷按钮,如开始/停止录制、清空会话、查找、节流、断点、Compose、Repeat 等。
- 会话窗口 (Session Window): 显示捕获到的所有网络请求和响应。这是 Charles 的核心区域。它可以有两种视图模式:
- Structure View (结构视图): 按主机名组织流量,树状结构显示,适合查看特定网站或服务的流量。
- Sequence View (序列视图): 按时间顺序平铺显示所有流量,适合查看整个请求发生的顺序。可以通过工具栏的按钮切换视图。
- 会话列表中的每一行代表一个网络请求及其响应,显示了方法、状态码、协议、主机、路径、大小、时间等信息。
- 详细信息窗口 (Details Window): 当在会话窗口中选中一个请求时,此区域显示该请求及其响应的详细信息。通常包含以下几个 Tab:
- Overview: 概览信息,如 URL, Status, Time等。
- Headers: 显示请求头和响应头。
- Query String: 显示 URL 中的查询参数。
- Form: 显示 POST 请求的表单提交数据。
- Request/Response Body: 显示请求体和响应体的内容。Charles 会根据 Content-Type 自动格式化常见的格式(如 JSON, XML)。
- Cookies: 显示请求和响应中的 Cookie 信息。
- SSL: 显示 SSL/TLS 连接的详细信息。
- Timing: 显示请求处理的各个阶段的耗时,用于性能分析。
基本抓包与查看流程
- 启动 Charles: 打开 Charles Proxy 应用。如果配置了系统代理,它会自动开始监听。
- 开始/停止录制: 默认情况下,Charles 启动后会自动开始录制流量。工具栏上的红色圆点按钮表示正在录制,点击它可以停止录制。停止录制后,流量不再被捕获,界面也不会更新。再次点击则开始新的录制。
- 清空会话: 工具栏上的扫帚图标按钮用于清空当前会话窗口中显示的所有流量记录。这在你开始一个新的调试任务时非常有用,可以避免旧流量的干扰。
- 进行网络操作: 在浏览器中访问网页,或在手机上使用应用,产生网络请求。
- 查看抓取到的流量: 流量会实时显示在 Charles 的会话窗口中。你可以切换 Structure View 或 Sequence View 来查看。
- 过滤流量: 如果流量很多很杂,可以使用工具栏的 Filter 文本框或菜单栏
Proxy
->Recording Settings...
来设置过滤规则,只显示特定主机或路径的流量。例如,在 Filter 框输入api.example.com
就会只显示该域名的流量。 - 检查详细信息: 在会话窗口中点击一个你感兴趣的请求,然后在详细信息窗口中查看其 Headers, Request/Response Body 等内容。利用不同 Tab 查看不同方面的信息。特别是 Response Body,如果是 JSON 或 XML,Charles 会自动格式化,非常便于阅读。
通过以上步骤,你已经能够进行基本的网络抓包和查看了。这本身就能解决很多问题,比如检查接口是否调用成功(看状态码是不是 200)、返回的数据格式是否正确、是否有预期的响应头等等。
深入使用核心功能
掌握了基本抓包后,Charles 的强大之处才刚刚展现。下面我们来详细介绍几个核心功能的使用方法和场景。
1. SSL Proxying (HTTPS 解密)
正如前文所述,HTTPS 解密是现代应用调试不可或缺的能力。确保你已经完成了以下步骤:
- 在需要抓包的设备(电脑、手机)上安装并信任了 Charles 的根证书。
- 在 Charles 的
SSL Proxying Settings
中添加了需要解密的主机和端口(通常是*:443
或特定域名)。
配置完成后,Structure View 中原本显示一个锁或问号图标的 HTTPS 请求,现在应该能正常展开,并在详细信息窗口中看到 Request/Response Body 的明文内容了。
常见问题及排查:
- 依然显示加密内容或错误:
- 检查设备是否正确设置了 Charles 为代理。
- 检查 Charles 是否正在运行且开启了代理功能。
- 检查设备是否成功安装并信任了 Charles 的根证书。特别是在 iOS 上,是否在“证书信任设置”中手动开启了信任。
- 检查 Charles 的
SSL Proxying Settings
中是否包含了你需要解密的主机和端口。 - 检查应用是否使用了 SSL Pinning 技术。
- 防火墙或杀毒软件可能阻止了代理连接或证书信任,尝试暂时禁用它们测试。
2. Throttling (流量限速)
调试应用在弱网环境下的表现非常重要,Charles 的 Throttling 功能可以轻松模拟各种网络条件。
- 开启限速: 在菜单栏选择
Proxy
->Throttle Settings...
,或点击工具栏上的乌龟图标。 - 在弹出的窗口中,勾选
Enable Throttling
。 - 可以选择
Only for specified hosts
并添加需要限速的主机,或者不勾选,对所有流量进行限速。 - 在预设的网络类型中选择一个(如 Dial-up, DSL, 3G, GPRS),或手动配置上传/下载速度、延迟、可靠性等参数。
- 点击
OK
保存设置。
开启限速后,Charles 会模拟你设定的网络环境,你可以观察应用在加载数据、发送请求时的表现,是否会出现超时、错误提示是否友好、界面是否卡顿等。
3. Breakpoints (断点)
断点功能是 Charles 最强大的调试工具之一,允许你在请求或响应发送/接收之前或之后暂停,检查并修改数据。
- 设置断点:
- 在菜单栏选择
Proxy
->Breakpoint Settings...
,或点击工具栏上的红色六边形图标。 - 勾选
Enable Breakpoints
。 - 在下方的
Include
列表中,点击Add
按钮,添加需要设置断点的主机和路径。你可以选择是在 Request 阶段断点还是 Response 阶段断点。 - 点击
OK
保存设置。
- 在菜单栏选择
- 使用断点:
- 当有符合断点规则的请求或响应发生时,Charles 会弹出一个断点编辑窗口。
- 这个窗口有四个 Tab:
Overview
,Headers
,Query String/Form
,Body
。你可以在这些 Tab 中查看并修改请求或响应的详细内容。 - 修改完成后,点击窗口下方的按钮:
Execute
: 继续发送修改后的请求或响应。Abort
: 中止当前请求(如果是在请求阶段)或忽略当前响应(如果是在响应阶段)。Cancel
: 取消断点操作,恢复原始请求或响应并继续发送。
- 如果你设置了请求和响应的双向断点,在一个阶段执行后,等待另一个阶段触发断点。
断点使用场景:
- 修改请求参数: 在请求发送前修改参数值,测试服务器对不同输入的响应。
- 修改请求头: 伪造用户代理、Cookie 或其他请求头,测试访问权限或特定场景。
- 修改响应状态码: 将 200 OK 修改为 404 Not Found 或 500 Internal Server Error,测试客户端对错误的处理逻辑。
- 修改响应体: 修改服务器返回的数据(如 JSON 内容),模拟不同的数据状态,测试界面的显示或解析逻辑。例如,修改一个用户信息的响应,模拟用户余额不足或某个字段缺失的情况。
断点提供了一种非常灵活且实时的调试方式,可以在不修改客户端或服务器代码的情况下,模拟各种网络交互场景。
4. Mapping (映射工具)
Mapping 功能允许你重定向请求,对于开发和测试来说非常方便。
-
Map Remote (远程映射):
- 在菜单栏选择
Tools
->Map Remote...
。 - 勾选
Enable Map Remote
。 - 点击
Add
按钮。 - 在
Map From
区域填写原始请求的 URL 信息(协议、主机、端口、路径)。 - 在
Map To
区域填写要重定向到的目标 URL 信息。 - 点击
OK
保存设置。 - 场景: 将应用程序中访问
api.production.com/users
的请求,映射到你本地开发环境的localhost:8080/dev/users
或测试环境的api.staging.com/users
。这样无需修改应用配置,就能快速切换后端环境。
- 在菜单栏选择
-
Map Local (本地映射):
- 在菜单栏选择
Tools
->Map Local...
。 - 勾选
Enable Map Local
。 - 点击
Add
按钮。 - 在
Map From
区域填写原始请求的 URL 信息。 - 在
Map To
区域选择一个本地文件作为响应。 - 点击
OK
保存设置。 - 场景: 前端开发时,后端接口还没开发好,或者需要模拟特定的复杂数据结构作为响应。你可以提前写好一个 JSON 文件,然后将对应的 API 请求映射到这个本地 JSON 文件。当浏览器或应用发起该请求时,Charles 会直接返回本地文件的内容,而不会去请求实际的服务器。这在前端并行开发或进行故障场景测试时非常实用。
- 在菜单栏选择
5. Rewrite (重写工具)
Rewrite 功能比断点更自动化,允许你定义一系列规则来批量修改请求或响应。
- 设置重写规则:
- 在菜单栏选择
Tools
->Rewrite...
。 - 勾选
Enable Rewrite
。 - 点击
Add
按钮创建一个新的规则集(可以给规则集命名)。 - 选中新的规则集,然后在下方的
Rules
区域点击Add
按钮,添加具体的重写规则。 - 每条规则可以定义作用于
Request
或Response
,以及具体的类型(如 Add Header, Modify Header, Remove Header, Host, Path, URL, Body, Query Parameter, Status)。 - 例如,要修改响应状态码:选择 Type 为
Status
,作用于Response
,在Value
中填写目标状态码(如 500)。 - 例如,要在所有请求头中添加一个固定的 Token:选择 Type 为
Add Header
,作用于Request
,填写 Header Name 和 Value。 - 例如,在响应体中替换某个字符串:选择 Type 为
Body
,勾选Regex
使用正则表达式,填写 Find(查找)和 Replace(替换)的内容。 - 点击
OK
保存设置。
- 在菜单栏选择
- 启用/禁用重写: 在 Rewrite 设置窗口或工具栏的笔形图标可以快速开启或关闭 Rewrite 功能。
Rewrite 使用场景:
- 批量修改请求头/响应头: 如添加或移除特定的缓存控制头、安全相关的头信息。
- 强制跳转/修改URL: 将所有 HTTP 请求重写为 HTTPS。
- 批量修改响应体内容: 对敏感数据进行脱敏,或者替换响应体中的特定字符串,模拟不同的业务逻辑返回(比 Map Local 更灵活,可以基于原始响应进行修改)。
- 修改查询参数: 批量添加、修改或移除 URL 中的查询参数。
- 测试缓存: 通过修改响应的缓存相关 Header 来测试客户端的缓存行为。
6. Repeat & Compose (重复发送请求 & 构造请求)
这两个功能用于方便地重放或创建请求进行测试。
-
Repeat:
- 在会话窗口中选中一个已抓取的请求。
- 右键点击该请求,选择
Repeat
或Repeat Advanced...
。 Repeat
会简单地再次发送该请求。Repeat Advanced...
允许你设置重复的次数、并发数以及两次发送之间的时间间隔。- 场景: 快速测试接口的稳定性、并发处理能力(简单测试),或者在调试断点后,重复发送请求以便再次触发断点。
-
Compose:
- 在会话窗口中选中一个已抓取的请求。
- 右键点击该请求,选择
Compose
。Charles 会弹出一个新的请求编辑窗口,复制了选中请求的 URL、方法、请求头、请求体等信息。 - 你可以修改这些信息,然后点击下方的
Execute
按钮发送这个新的请求。 - 你也可以完全从头开始创建一个新的请求:选择菜单栏
Tools
->Compose...
。 - 场景: 基于一个已有的请求进行微调后发送,或者手动构造一个全新的请求来测试某个 API 接口,无需依赖客户端应用。
7. 性能分析 (Performance & Timing)
Charles 在 Timing Tab 中提供了详细的请求耗时分解,帮助你分析性能瓶颈。
- 在会话窗口中选中一个请求。
- 在详细信息窗口中切换到
Timing
Tab。 - 这里会显示 DNS lookup, connect, SSL handshake, request sent, waiting, receiving 等各个阶段的耗时。
- 对于加载网页的请求,Sequence View 中会显示一个时间线,直观展示资源的加载顺序和并行情况。
通过分析 Timing 数据,你可以判断是 DNS 解析慢、建立连接慢、SSL 握手慢、发送请求数据慢、服务器处理请求慢(Waiting/TTFB – Time To First Byte)还是接收响应数据慢,从而找到性能优化的方向。
移动端抓包调试重点
移动应用(iOS/Android App)的网络调试是 Charles 的一个重要应用场景。除了前面提到的在手机上设置代理和安装信任证书外,还有一些需要注意的地方:
- 代理设置: 确保手机连接的 Wi-Fi 网络与运行 Charles 的电脑在同一局域网,且正确设置了代理 IP 和端口。蜂窝网络流量通常无法通过 Charles 抓取,只能抓取 Wi-Fi 环境下的流量。
- 证书信任: 这是最常出错的步骤。务必根据手机操作系统版本,仔细按照步骤安装并信任 Charles 根证书。对于 Android 7.0+ 和 iOS 10.3+,系统对用户安装的证书信任权限有所限制,可能需要在应用的
network_security_config.xml
中额外配置或使用旧版本系统/越狱设备(不推荐)。 - 应用是否使用系统代理: 大部分应用会遵循系统代理设置,但有些应用可能会绕过系统代理直连网络,这种流量 Charles 无法抓取。
- SSL Pinning: 部分对安全性要求极高的应用会使用 SSL Pinning,即应用内置了信任的服务器证书公钥或指纹,即使系统信任 Charles 证书,应用也会拒绝连接。这时需要更高级的手段(如 Hooking 或反编译修改应用)才能抓取,超出了入门范畴。
- 抓包过滤: 移动应用通常会产生大量与调试无关的流量(如广告、统计、系统服务等),利用 Filter 功能专注于你需要调试的应用流量非常重要。
其他实用功能与技巧
- Focus: 在 Structure View 中,右键点击某个主机,选择
Focus
。这会在界面左侧创建一个 Focused Hosts 列表,只显示这些主机下的流量,进一步简化视图。 - Notes: 可以给抓取到的请求添加备注,方便后续回顾或与他人交流。
- Export/Import: 可以将当前的会话数据(
.chls
文件)导出,方便保存或分享给其他人进行分析。其他人可以使用 Charles 导入这个文件查看完整的抓包记录。 - Search: 使用查找功能 (Cmd/Ctrl + F) 在抓取到的请求和响应内容中搜索关键词。
- Publish Gist: 可以将选中的请求或整个会话发布到 GitHub Gist 或其他服务,方便分享调试信息。
总结
Charles Proxy 是一款功能全面、易于使用的网络抓包调试工具。它不仅仅是一个简单的抓包器,更提供了强大的 HTTPS 解密、流量控制、请求/响应修改、映射等高级功能,使其成为 Web 和移动开发调试的利器。
通过本文的介绍,你应该对 Charles Proxy 有了一个全面的认识,并掌握了基本的安装、配置和抓包流程,以及 SSL Proxying、Throttling、Breakpoints、Mapping、Rewrite 等核心功能的使用方法。
掌握 Charles Proxy 的使用,能够显著提升你在开发和调试过程中定位和解决网络问题的效率。无论是分析接口调用、排查加载缓慢、测试弱网环境,还是模拟各种数据场景,Charles 都能为你提供强有力的支持。
网络调试是一项实践性很强的技能,建议你在日常工作中多多使用 Charles Proxy,结合实际的项目需求去探索和应用它的各项功能。随着经验的积累,你会越来越熟练地利用它解决各种复杂的网络问题。
希望这篇详细的入门指南能帮助你迈出使用 Charles Proxy 进行网络抓包调试的第一步!