从零到实战:用Charles在Windows上抓取安卓App网络请求的完整工作流
2026/6/6 16:44:07 网站建设 项目流程

从零到实战:用Charles在Windows上抓取安卓App网络请求的完整工作流

移动应用开发与测试过程中,网络请求分析是至关重要的环节。无论是调试API接口、排查性能瓶颈,还是分析第三方服务调用,掌握专业的抓包工具都能显著提升工作效率。Charles作为一款功能强大的HTTP代理工具,能够帮助开发者深入洞察应用与服务器之间的每一次数据交换。本文将带您从零开始,构建一个完整的Windows+Charles+安卓手机的网络调试环境,并通过实战案例演示如何利用Charles的高级功能解决真实开发问题。

1. 环境准备与基础配置

1.1 工具安装与初始设置

首先需要在Windows电脑上安装最新版Charles(当前最新版本为4.6.3)。安装过程简单直接,但有几个关键配置项需要注意:

  • 代理端口设置:默认使用8888端口,如果该端口被占用,可以在Proxy > Proxy Settings中修改
  • SSL代理全局启用:在Proxy > SSL Proxy Settings中添加*作为Host和Port,表示捕获所有SSL流量
  • 本地证书安装:通过Help > SSL Proxying > Install Charles Root Certificate将Charles根证书安装到Windows的受信任根证书颁发机构存储

注意:安装证书时建议选择"将所有证书放入下列存储",并勾选"受信任的根证书颁发机构",避免后续出现证书警告。

1.2 安卓设备网络配置

确保手机与电脑处于同一局域网,然后进行以下操作:

  1. 查看电脑的本地IP地址(cmd中执行ipconfig
  2. 在手机Wi-Fi设置中配置手动代理:
    • 代理主机名:电脑的本地IP
    • 代理端口:8888(或Charles中自定义的端口)
  3. 安装手机端证书:
    • 手机浏览器访问chls.pro/ssl下载证书
    • 在系统设置中为证书命名并完成安装

常见问题排查表

问题现象可能原因解决方案
无法连接Charles防火墙阻止在Windows防火墙中添加Charles例外
手机无法上网代理配置错误检查IP和端口是否正确
HTTPS请求显示unknown证书未安装重新安装手机端证书

2. 安卓7.0+的特殊配置

对于Android 7.0及以上系统,由于网络安全策略升级,仅信任系统预置证书,需要额外处理才能捕获应用流量:

2.1 证书系统级安装

  1. chls.pro/ssl下载证书文件(通常为pem格式)
  2. 使用OpenSSL获取证书哈希值:
    openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem
  3. 重命名证书为<哈希值>.0(如5febeb2b.0
  4. 将证书推送到手机系统证书目录:
    adb push 5febeb2b.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/5febeb2b.0

2.2 应用网络配置修改

如果目标应用设置了网络安全配置,还需要修改其AndroidManifest.xml:

<application android:networkSecurityConfig="@xml/network_security_config" ... >

配套的network_security_config.xml文件应包含:

<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>

3. Charles核心功能实战

3.1 流量捕获与过滤

启动Charles后,手机上的所有网络请求将显示在主界面。为提高效率,可以使用以下过滤技巧:

  • Focus功能:右键目标域名选择"Focus",仅显示该域名相关请求
  • Filter输入框:输入关键词快速定位特定请求
  • Recording Settings:设置包含/排除规则,只记录目标流量

推荐过滤策略组合

  1. 先使用宽泛过滤捕获所有流量
  2. 分析出目标API模式后设置精确过滤
  3. 对关键请求添加Star标记方便后续查找

3.2 断点调试与请求修改

Charles的断点功能允许拦截并修改请求/响应:

  1. Proxy > Breakpoint Settings中添加断点规则
  2. 设置触发条件(如特定URL包含"login")
  3. 请求被拦截时可修改:
    • URL参数
    • Headers
    • Body内容
  4. 点击"Execute"继续请求或"Abort"终止

提示:过度使用断点会显著降低应用响应速度,调试完成后应及时禁用。

3.3 性能分析与优化

通过Charles可以直观分析网络性能问题:

  • Waterfall视图:显示每个请求的时间分布(DNS、连接、SSL握手、传输等)
  • 时序对比:相同请求在不同环境下的耗时差异
  • 重复请求检测:识别不必要的重复调用

优化案例:某图片列表页加载慢,通过Waterfall发现:

  1. 图片未启用缓存(缺少Cache-Control头)
  2. 图片尺寸过大(实际显示尺寸为200x200,但下载了800x800的原图)
  3. 图片域名未启用HTTP/2,导致并行下载受限

4. 高级应用场景

4.1 API逆向工程

通过Charles可以分析未公开的API接口:

  1. 捕获正常操作产生的请求序列
  2. 分析请求参数规律(如时间戳、签名算法)
  3. 使用Compose功能重构请求
  4. 验证参数必要性(通过删减测试)
POST /api/v3/user/login HTTP/1.1 Host: app.example.com Content-Type: application/json { "phone": "13800138000", "password": "e10adc3949ba59abbe56e057f20f883e", "timestamp": "1659324678", "sign": "a3f5e7b9d2c4f6a8b0d1e3c5f7" }

4.2 数据Mock与测试

利用Charles的Map功能可以实现:

  • 本地替换:将线上API映射到本地JSON文件
  • 远程重定向:将请求转发到测试环境
  • 随机延迟:模拟弱网环境测试应用容错

配置步骤:

  1. 准备测试数据文件(JSON/XML格式)
  2. Tools > Map Local中添加映射规则
  3. 设置匹配条件和本地文件路径
  4. 启用映射并验证效果

4.3 自动化脚本集成

Charles支持通过外部脚本扩展功能:

# 示例:自动分析API响应时间 import json from charles_session import get_session session = get_session() requests = session.get_requests() slow_apis = [ req for req in requests if req['duration'] > 1000 # 筛选耗时>1s的请求 ] with open('slow_apis.json', 'w') as f: json.dump(slow_apis, f, indent=2)

5. 实战案例:电商App登录优化

以某电商App为例,演示完整工作流:

  1. 问题现象:用户反馈登录经常失败
  2. 抓包分析
    • 发现登录接口有时返回504超时
    • Waterfall显示SSL握手耗时异常(平均1.8s)
  3. 解决方案
    • 将SSL证书更换为更轻量的ECDSA证书
    • 优化服务器TLS配置,禁用老旧加密套件
    • 客户端预建立连接
  4. 验证效果
    • SSL握手时间降至300ms
    • 登录成功率从92%提升至99.6%

关键优化参数对比:

配置项优化前优化后
TLS版本1.0/1.2仅1.2
证书类型RSA-2048ECDSA-256
加密套件支持20+种精选4种
会话复用未启用启用

6. 安全与隐私最佳实践

使用Charles进行抓包时需注意:

  • 敏感数据处理
    • 对认证信息、个人数据等启用SSL代理黑名单
    • 使用Protect功能对特定字段自动脱敏
  • 会话管理
    • 定期清除捕获的会话数据
    • 对重要操作使用一次性令牌
  • 团队协作
    • 导出会话时选择Export with Password
    • 使用Session > Clear及时清理历史记录

推荐的安全检查清单:

  1. [ ] 确认仅捕获目标应用的流量
  2. [ ] 敏感字段已配置自动脱敏
  3. [ ] 测试数据不包含真实用户信息
  4. [ ] 共享会话文件已加密
  5. [ ] 调试完成后关闭Charles代理

在实际项目中,我们通常会建立专门的内网测试环境,避免直接在生产环境抓包。对于金融类App,还需要特别注意合规要求,必要时采用专门的测试账号和数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询