Android Charles 抓包详解

一、前言


不管是移动开发者还是测试者,抓包工具对于我们的工作都是非常有帮助的,而 Charles 是一款非常优秀的抓包工具。Charles 不仅可以帮助我们抓取服务器返回的数据,还可以修改请求参数、修改响应体,基本上HTTP能修改的东西,Charles都能帮我们修改。所以当我们接口在 Mock 阶段时我们可以通过 Charles 设置我们本地的 JSON 数据,加速我们的开发。而且还能模拟弱网环境,帮助我们调试网络极端情况的用户体验,下面我们就一起来体验下Charles的功能吧。

 

二、功能


首先到 Charles 官网去下载软件,安装非常简单,一直下一步就可以了。

2.1 初始设置

开启 start recording 按钮,如下图所示:

查看 Charles 代理监听的端口号,Proxy -> Proxy Settings , 一般机器上默认是 8888 端口, 如下图所示:

接下来是手机设置,以 Android 手机为例,进入我们已经连接的 WIFI(有些手机需要长按连接的 wifi 名称然后点击高级设置),设置该WIFI,代理改成手动,然后将主机名改成你电脑的 ip 地址,端口用上面的,然后点击保存。保存后最好重连 wifi 让刚才的设置生效。

设置好之后,Charles 会弹出一个框,提示是否允许手机进行连接,接受即可,如下图所示:

如果你不小心点击了 拒绝(Deny),也可以在这里: Proxy -> Access Control Settings 进行添加你的手机IP:

通过以上的设置,Charles就可以抓HTTP请求了。

 

2.2 Charles 抓包 HTTPS

经过上面的设置之后,我们就可以对手机的网络请求进行抓包了,但是如果请求的是 HTTPS,抓到的包无法查看,需要电脑和手机安装证书 (Help -> SSL Proxying)。

电脑上安装证书很简单,直接下一步就可以了,不用任何设置。这里讲下手机上安装证书,因为手机上安装证书可能会遇到问题:点击上图的第二个 , 会给我们安装提示:

上面的提示框意思是说,在手机设置好代理后,在手机浏览器中访问 chls.pro/ssl 下载证书。这里需要注意的是,有的手机可能会提示:无法安装该证书,因为无法读取证书文件。解决方法是不要使用系统的浏览器下载,使用第三方浏览器下载 UC 或者 Edge 浏览器。下载完成后,证书文件名可能是:charles-proxy-ssl-proxying-certificate.pem。证书下载完成后,在手机上安装该证书,流程如下(小米手机为例):

打开手机 设置 -> 更多设置 -> 系统安全 -> 从SD卡安装 , 然后输入你自定义的证书名称即可。

电脑和手机上证书都安装完毕后,在Charles上开启 SSL Proxy (Proxy -> SSL Proxying Settings ):

经过以上步骤后,你就可以对 HTTPS 请求抓包了

 

2.3 Android 7.0 及以上系统中 HTTPS 抓包

在 Android 7.0 及以上系统中,HTTPS 抓包可能会失败。因为处于安全的考虑,Android 7.0 及以上,系统默认只会信任系统(System) 级别的证书,不再信任用户添加的证书 (User),也就是说上面我们在设备上安装的 Charles 根证书,系统不再信任。具体怎么解决可以看我的这篇博客 - Android targetSdkVersion 升级至 26 指南。更多的安全策略配置,可以参考官方文档:

https://developer.android.com/training/articles/security-config.html

 

2.4 模拟慢网速

可以在 Proxy -> Throttle Settings 设置网络速度,还可以自定义带宽 (Bandwidth):

 具体操作步骤是 点击上面的 Enable Throttling,然后在下面的 Throttle preset 中选择带宽。

 

2.5 Map 映射功能

Map 映射包含两种一种是 Map Remote 和 Map Local。设置路径:Tools -> Map Local / Remote,如果这个URL已经请求过,可以对该请求单击右键,然后点击 Map Local/Remote。

Map Remote 顾名思义就是把匹配的请求映射到另一个远程URL,Map Local 是将匹配的请求映射到本地文件。设置本地文件时注意要是 UTF-8 编码的,否则中文会出现乱码。

 

2.6 Breakpoints 断点功能

可以使用 Charles 在某个网络请求的时候进行断点, 这样可以精确的定位某个网络请求:

除了上面的手动添加需要断点的 URL,如果这个 URL 已经请求过,可以对该请求单击右键,然后点击 Breakpoints 添加断电。通过断点功能,下次请求时,可以修改 Request 参数 和 Response 返回值。需要注意的是修改完 Request 参数需要点击 Excute 按钮,请求成功后,才能修改 Response 返回值。

 

 

2.7 Compose 功能修改 Request

还可以通过 Charles 修改请求的 URL、Method、Header、Parameter等,修改方式:对请求单击右键,然后点击 compose 按钮。

 

2.8 Rewrite 重写功能

Rewrite重写功能是全局设置的,并不是对某个请求单击右键的方式临时操作下, Rewrite 可以

  • 修改请求头(Add/Modify/Remove Header)
  • 修改Host/Path/URL
  • 修改请求参数(Add/Modify/Remove Query-Parameter)
  • 修改响应状态(Response Status)
  • 修改Body

Rewrite设置路径: Tools -> Rewrite。

Rewrite重写顾名思义就是替换,所以是基于某个固定的值替换成某个值,添加规则的时候,支持正则表达式:

 


2.9 Repeat 重试功能

Repeat 功能有两种:一种是简单的重试一次(Repeat);还有一种 Repeat advances 可以设置重试的次数和并发的数量。

重试一次主要用于是和服务端联调,如果接口有问题,服务端开发人员可能需要在后台代码打断点的方式来排查问题。这个时候,我们不需要在 app 中重新重复上次的请求(可能需要填写字段比较多或者界面链路比较长),只需要在Charles中对该请求单击右键,然后 Repeat 即可。Repeat advances 可以来对服务器进行压力测试,或者批量提交写数据等,如:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值