返回博客

Charles Proxy用于移动应用调试:流量拦截和HTTP/HTTPS分析的完整指南

Charles Proxy 是一个强大的工具,用于拦截和分析移动应用的 HTTP/HTTPS 流量。了解如何配置它以进行调试、测试和使用代理。

📅2026年8月5日
```html

您启动应用程序,但它表现得不可预测:数据未加载,广告未显示,帐户因看似无原因而被封禁。要了解“幕后”发生了什么,需要查看应用程序与服务器之间的实际HTTP请求。为此,存在Charles Proxy——一个可以实时拦截、分析和替换移动应用流量的工具。

在本指南中,我们将详细介绍Charles Proxy在iOS和Android上的完整设置、HTTPS的工作、服务器响应的替换以及与外部代理服务器的集成——这一切都没有多余的理论,只有实践。

什么是Charles Proxy,它有什么用

Charles Proxy是一个适用于Windows、macOS和Linux的桌面应用程序,它作为您设备(智能手机、模拟器)与互联网之间的HTTP/HTTPS代理工作。当您通过Charles引导流量时,程序会记录所有请求和响应,让您看到应用程序发送到服务器的每一个字节的数据。

从本质上讲,Charles做的事情与Chrome浏览器中的DevTools相同——只是针对没有内置检查器的移动应用。这在需要了解时尤其重要:

  • 应用程序在授权或注册帐户时传递了哪些参数
  • 哪些头部(User-Agent、Device-ID、令牌)发送到服务器
  • Facebook、TikTok或Instagram如何在登录时验证设备
  • 为什么应用程序在特定条件下返回错误
  • 市场在请求价格或目录时传递了哪些数据

对于套利者来说,Charles Proxy是一个侦察工具:您可以直接查看Facebook Ads从设备收集的指纹数据,并了解为什么帐户在登录后立即被封禁。SMM专家使用Charles分析Instagram和TikTok的API,以了解请求的限制和模式。开发人员和测试人员使用它来模拟服务器响应并检查应用程序在非标准情况下的行为。

Charles Proxy的关键功能:

  • 拦截HTTP和HTTPS流量(包括TLS 1.3)
  • 以方便的格式(JSON、XML、文本)查看请求和响应的主体
  • 替换服务器响应(重写、本地映射、远程映射)
  • 断点(Breakpoints)用于手动编辑请求
  • 减慢连接以模拟慢速互联网
  • 录制和重放会话
  • 支持外部代理(HTTP、SOCKS5)

安装和初始设置Charles Proxy

Charles Proxy作为付费应用程序提供,具有30天的试用期。您可以从官方网站charlesproxy.com下载。macOS、Windows和Linux版本在功能上是相同的。

步骤1. 安装应用程序

下载适合您操作系统的安装程序,运行并按照标准安装程序进行操作。启动Charles后,它会立即开始监听您计算机上的8888端口。这是默认端口,设备将通过该端口引导流量。

步骤2. 检查计算机的IP地址

为了让移动设备能够连接到Charles,它必须与计算机在同一Wi-Fi网络中。查找您计算机在本地网络中的IP地址:

  • macOS: 系统偏好设置 → 网络 → 选择Wi-Fi → IP地址
  • Windows: 命令提示符 → ipconfig → IPv4地址
  • 在Charles中: 帮助 → 本地IP地址

记住这个地址——在设置智能手机的代理时会用到。通常是类似于192.168.1.X的格式。

步骤3. 允许设备连接

在第一次连接移动设备时,Charles会显示一个对话框,询问:“是否允许来自IP xxx.xxx.x.x的连接?”点击允许。如果窗口没有出现——请检查Windows或macOS防火墙是否未阻止Charles。在macOS上,可能需要在系统偏好设置 → 安全性 → 防火墙中明确允许传入连接。

为Android设置Charles Proxy

Android上的设置分为两个部分:通过Charles引导流量和安装证书以解密HTTPS。没有证书,您将只能看到加密数据——无用的字符集。

在Android上设置Wi-Fi代理

  1. 打开设置 → Wi-Fi
  2. 长按已连接的网络 → 更改网络
  3. 启用高级选项
  4. 代理字段中选择手动
  5. 代理主机:您计算机的IP地址(例如,192.168.1.5
  6. 端口:8888
  7. 保存设置

之后,设备的所有HTTP流量将通过Charles。应用程序屏幕上将开始出现请求记录。

在Android上安装Charles证书

  1. 在设备上打开浏览器并访问chls.pro/ssl
  2. 将下载证书文件.pem
  3. 打开设置 → 安全性 → 安装证书
  4. 选择下载的文件并安装为CA证书
  5. 输入任何名称,例如“Charles SSL”

在Android 7及以上版本中,应用程序默认不信任用户证书。这意味着系统应用程序和大多数第三方应用程序(Facebook、Instagram、TikTok)将阻止拦截。要与这些应用程序一起使用,您需要root权限或使用可以将证书安装到系统存储中的Android模拟器(例如,Genymotion或Android Studio Emulator)。

⚠️ 对于Android 7+重要

从Android 7(Nougat)开始,应用程序必须在network_security_config.xml文件中明确声明对用户证书的信任。大多数流行应用程序(Facebook Ads、Instagram)都没有这样做。要分析它们,请使用带有root的模拟器或修改过的Android版本。

为iOS设置Charles Proxy

在iOS上,过程稍微简单一些——Apple提供了通过配置文件安装证书的标准机制,大多数应用程序尊重系统代理设置。

在iPhone/iPad上设置Wi-Fi代理

  1. 打开设置 → Wi-Fi
  2. 点击已连接网络旁边的(i)图标
  3. 向下滚动到HTTP代理部分
  4. 选择手动
  5. 服务器:带有Charles的计算机的IP地址
  6. 端口:8888
  7. 身份验证:关闭(如果在Charles中未设置)

在iOS上安装Charles证书

  1. 在iPhone上打开Safari浏览器并访问chls.pro/ssl
  2. Safari会提示安装配置文件——点击允许
  3. 转到设置 → 通用 → VPN和设备管理
  4. 找到Charles配置文件并点击安装
  5. 如有必要,输入设备的PIN码
  6. 现在转到设置 → 通用 → 关于本设备 → 信任证书
  7. 启用Charles Proxy CA旁边的开关

之后,Charles将能够解密大多数iOS应用程序的HTTPS流量。例外是启用了证书固定(Certificate Pinning)的应用程序——例如,银行应用程序和某些版本的Instagram。要分析它们,需要越狱和特殊的补丁,例如SSL Kill Switch。

拦截HTTPS流量:SSL代理设置

即使安装了证书,Charles默认也不会解密HTTPS流量——需要明确指定要启用SSL代理的域。这是故意的,以免使界面过载。

如何启用SSL代理

  1. 在Charles菜单中选择代理 → SSL代理设置
  2. 勾选启用SSL代理
  3. 在“包含”部分点击添加
  4. 在主机字段中输入*(星号=所有域)
  5. 在端口字段中输入443
  6. 点击确定并重新启动拦截

现在Charles将解密所有域的HTTPS流量。如果您对特定服务感兴趣——请在星号的位置指定其域。例如,要分析Instagram,请输入*.instagram.com,对于Facebook——*.facebook.com

启用SSL代理后可以看到什么

在Charles的左侧面板中,您将看到域树。单击任何请求——右侧将打开详细信息:URL、方法(GET/POST)、请求头、请求主体(如果有)和服务器响应。请求响应选项卡以原始形式或方便的格式化形式(JSON、XML、HTML)显示数据。

请求头特别有价值——因为其中传递了授权令牌、设备标识符、应用程序版本和其他平台用于验证的数据。如果您在对Facebook Ads或TikTok的请求中看到可疑参数——这是理解帐户为什么被封禁的第一步。

分析工具:断点、重写和本地映射

Charles不仅是流量查看器,还是一个强大的流量修改工具。三个最常用的关键工具:

断点(Breakpoints)

断点允许在请求或响应经过时拦截,并手动编辑数据,直到它们到达接收方。这是一个强大的测试工具:可以更改请求参数、插入其他令牌或修改服务器响应。

要设置断点:右键单击列表中的请求 → 断点。现在,当应用程序下次访问该URL时,Charles将暂停传输并打开编辑窗口。您可以更改任何参数并点击执行以继续。

重写(Rewrite)

重写自动工作:您设置规则“如果请求中出现X——替换为Y”,Charles会在所有符合条件的请求中应用它,而无需您的参与。这对于大规模测试非常方便:例如,在所有对特定域的请求中替换特定头部的值。

设置:工具 → 重写 → 添加 → 设置规则集名称 → 添加规则 → 指定类型(头部、主体、URL等)、要查找的内容和替换内容。

本地映射(Map Local)

本地映射允许用本地文件的内容替换服务器响应。这对于在没有真实后端的情况下测试应用程序是不可或缺的:您创建一个包含所需数据的JSON文件,应用程序将接收这些数据,而不是API的真实响应。

设置:工具 → 本地映射 → 添加 → 指定要拦截的URL和本地文件的路径。现在,对该URL的每个请求将返回您文件的内容。这使得测试边界情况成为可能:空商品列表、500服务器错误、非标准数据格式。

工具 何时使用 复杂性
断点 一次性手动编辑请求/响应
重写 按规则自动替换
本地映射 用本地文件替换API响应
远程映射 将请求重定向到另一个服务器
限速 模拟慢速连接

如何通过Charles连接外部代理服务器

Charles Proxy不仅可以作为本地拦截器,还可以作为设备与外部代理服务器之间的中介。这在需要同时分析流量并通过特定IP地址引导流量时特别有用——例如,检查应用程序在从另一个国家或通过移动IP连接时的表现。

这种方案如下所示:智能手机 → Charles Proxy(计算机) → 外部代理服务器 → 互联网。您可以在Charles中看到所有流量,但请求将通过所需的IP发送。

在Charles中设置外部代理

  1. 打开代理 → 外部代理设置
  2. 勾选使用外部代理服务器
  3. 对于HTTP流量:启用Web代理(HTTP),输入代理的主机和端口
  4. 对于HTTPS流量:启用安全Web代理(HTTPS),输入相同的数据
  5. 如果代理需要身份验证——输入用户名和密码
  6. 点击确定

Charles支持HTTP和SOCKS5代理。对于SOCKS5,请在相同设置中使用SOCKS代理选项卡。如果您使用的是带有IP轮换的住宅代理——每个新请求将通过不同的地址发送,这对于测试平台在更改IP时的行为非常方便。

本地流量的例外

如果需要让部分流量直接通过(不经过外部代理),请在为以下主机绕过外部代理字段中添加例外。例如,本地地址localhost127.0.0.1通常应排除,以免破坏本地服务。

在Charles中需要外部代理的情况:

  • 测试应用程序的地理位置(它在美国、德国、巴西的表现)
  • 检查不同地区内容的可用性
  • 在使用移动代理时分析请求——了解平台如何响应移动IP
  • 在测试时绕过区域限制

实际案例:套利、SMM和应用测试

我们来看看Charles Proxy在实际工作中使用的具体任务——没有多余的理论。

场景1. 套利——分析Facebook Ads的指纹

套利者的主要任务之一是了解为什么Facebook在登录后立即封禁帐户。Charles允许拦截Facebook应用程序在授权时的初始请求,并查看哪些设备数据被传送到Meta的服务器。

在对graph.facebook.com的请求中,您将看到类似device_idhardware_idadvertiser_id和其他标识符的参数。这有助于了解在使用多个帐户时需要在防检测浏览器(如Dolphin Anty或AdsPower)中隔离哪些数据。

拦截服务器在封禁时的响应也很有用——其中通常包含错误代码,有时还会显示Facebook在应用程序界面中未显示的封禁原因。

场景2. SMM——研究Instagram和TikTok的API

管理10-50个客户帐户的SMM专家经常面临平台的限制:Instagram每小时限制点赞、关注和评论的数量。Charles可以准确测量这些限制,手动拦截与帐户的请求。

拦截对i.instagram.com的请求,您将看到API的结构:端点、参数、授权令牌。这有助于设置自动化,使其模拟真实用户的行为,避免被封禁。TikTok的工作原理类似——分析对api16-normal-c-useast1a.tiktokv.com的请求显示平台检查哪些参数。

场景3. 电子商务——分析市场的API

在Wildberries、Ozon和Avito上的卖家积极使用竞争对手价格监控。Charles允许拦截市场移动应用程序的请求,并查看通过哪些端点加载价格和库存数据。这有助于设置一个模拟移动应用程序行为的解析器——这样的请求比浏览器解析器的请求要容易得多。

例如,在Wildberries应用程序中,您可以拦截对catalog.wb.ru的请求,并查看过滤和分页参数的确切结构。这为构建解析器提供了现成的模板,该解析器将比尝试重现浏览器请求更有效地绕过保护。为了实现稳定的解析,您需要高速度和连接稳定性的数据中心代理

场景4. QA测试移动应用程序

测试人员使用Charles检查应用程序在非标准情况下的行为。通过本地映射可以将服务器响应替换为500错误,并检查应用程序如何处理后端故障。限速功能可以模拟慢速互联网(3G、Edge),检查应用程序在长时间加载时是否会挂起。断点功能使手动更改数据并检查边界情况成为可能——例如,如果服务器返回空数组而不是商品列表,会发生什么。

常见问题及其解决方案

在使用Charles Proxy时,新手经常会遇到相同的问题。让我们来看看最常见的问题。

问题1:Charles显示“unknown”而不是HTTPS请求的内容

原因: SSL代理未启用或证书未安装在设备上。
解决方案: 检查在代理 → SSL代理设置中是否启用了SSL代理,并添加了主机*:443。确保Charles证书已安装在设备上,并且已启用完全信任(在iOS上通过证书信任设置)。

问题2:流量未被拦截,请求列表为空

原因: 设备未通过Charles引导流量,或Charles未接受连接。
解决方案: 检查设备和计算机是否在同一Wi-Fi网络中。确保设备的代理设置中指定了正确的计算机IP和端口8888。检查Charles是否处于录制状态:代理 → 开始录制(或工具栏中的红点按钮)。

问题3:启用Charles时应用程序无法工作

原因: 应用程序使用证书固定——不仅检查信任链,还检查服务器的特定证书。Charles证书与预期不符。
对于具有root权限的Android解决方案: 安装Magisk模块TrustUserCerts或使用Frida绕过SSL固定。对于越狱的iOS——SSL Kill Switch 2。没有root/越狱,绕过证书固定极其困难。

问题4:Charles拦截了太多流量,界面卡顿

原因: 记录了来自设备上所有应用程序的所有流量,包括系统服务。
解决方案: 使用过滤器。在过滤器字段(左侧面板底部)中输入感兴趣服务的域名。或者在代理 → 访问控制设置中设置访问控制,以便Charles仅接受来自特定应用程序的连接,通过代理 → 录制设置 → 包含/排除。

问题5:关闭Charles后没有互联网

原因: 移动设备上保留了代理设置,但Charles已不再运行——流量无处可去。
解决方案: 使用完Charles后,始终删除设备上的代理设置。在Wi-Fi设置中将代理参数恢复为“无”或“关闭”。

问题 快速解决方案
HTTPS显示“unknown” 启用SSL代理+安装证书
请求列表为空 检查IP、端口和Charles是否在录制模式
应用程序无法打开 证书固定——需要root/越狱
界面卡顿 在过滤器字段中添加域名过滤器
关闭后没有互联网 删除设备上的代理设置

结论

Charles Proxy是所有与移动应用程序打交道的人最有用的工具之一:无论是想了解Facebook Ads验证机制的套利者,研究Instagram API的SMM专家,还是在非标准条件下测试自己应用程序的开发人员。安装只需15-20分钟,而设置后的功能难以估量。

需要记住的主要一点是:Charles是一个分析和调试工具,而不是匿名工具。要处理多个帐户、从不同地理位置进行测试或绕过平台限制,需要单独的保护级别——具有真实IP地址的代理服务器。

如果您正在分析移动应用程序的流量以进行套利或社交媒体帐户操作,建议将Charles与住宅代理结合使用——它们提供真实的家庭用户IP,最大限度地降低测试和处理帐户时被封禁的风险。对于需要高速度和稳定性的任务——例如,大规模解析市场API——数据中心代理将是高正常运行时间的理想选择。

```