本课时我们主要学习如何使用 Charles。

Charles 是一个网络抓包工具,我们可以用它来做 App 的抓包分析,得到 App 运行过程中发生的所有网络请求和响应内容,这就和 Web 端浏览器的开发者工具 Network 部分看到的结果一致。

Charles、Fiddler 等都是非常强大的 HTTP 抓包软件,功能基本类似,不过 Charles 的跨平台支持更好。所以我们选用 Charles 作为主要的移动端抓包工具,用于分析移动 App 的数据包,辅助完成 App 数据抓取工作。

本节目标

本节我们以电影示例 App 为例,通过 Charles 抓取 App 运行过程中的网络数据包,然后查看具体的 Request 和 Response 内容,以此来了解 Charles 的用法。

同时抓取到数据包之后,我们采用 Python 将请求进行改写,从而实现 App 数据的爬取。

准备工作

请确保已经正确安装 Charles 并开启了代理服务,另外准备一部 Android 手机,系统版本最好是在 7.0 以下。

如果系统版本在 7.0 及以上,可能出现 SSL Pining 的问题,可以参考第一课时的思路来解决。

然后手机连接 Wi-Fi,和 PC 处于同一个局域网下,另外将 Charles 代理和 Charles CA 证书设置好,同时需要开启 SSL 监听。

此过程的配置流程可以参见:https://cuiqingcai.com/5255.html。

最后手机上安装本节提供的 apk(apk 随课件一同领取),进行接下来的 Charles 抓包操作。

原理

首先将 Charles 运行在自己的 PC 上,Charles 运行的时候会在 PC 的 8888 端口开启一个代理服务,这个服务实际上是一个 HTTP/HTTPS 的代理。

确保手机和 PC 在同一个局域网内,我们可以使用手机模拟器通过虚拟网络连接,也可以使用手机真机和 PC 通过无线网络连接。

设置手机代理为 Charles 的代理地址,这样手机访问互联网的数据包就会流经 Charles,Charles 再转发这些数据包到真实的服务器,服务器返回的数据包再由 Charles 转发回手机,Charles 就起到中间人的作用,所有流量包都可以捕捉到,因此所有 HTTP 请求和响应都可以捕获到。同时 Charles 还有权力对请求和响应进行修改。

抓包

好,我们先打开 Charles,初始状态下 Charles 的运行界面如图所示。

Charles 会一直监听 PC 和手机发生的网络数据包,捕获到的数据包就会显示在左侧,随着时间的推移,捕获的数据包越来越多,左侧列表的内容也会越来越多。

可以看到,图中左侧显示了 Charles 抓取到的请求站点,我们点击任意一个条目便可以查看对应请求的详细信息,其中包括 Request、Response 等内容。

接下来清空 Charles 的抓取结果,点击左侧的扫帚按钮即可清空当前捕获到的所有请求。然后点击第二个监听按钮,确保监听按钮是打开的,这表示 Charles 正在监听 App 的网络数据流,如图所示。

这时打开 App,注意一定要提前设置好 Charles 的代理并配置好 CA 证书,否则没有效果。

打开 App 之后我们就可以看到类似如下的页面。

这时候我们就可以发现 Charles 里面已经抓取到了对应的数据包,出现了类似如图所示的结果。


我们在 App 里不断上拉,可以看到 Charles 捕获到这个过程中 App 内发生的所有网络请求,如图所示。

左侧列表中会出现一个 dynamic1.scrape.cuiqingcai.com 的链接,而且在 App 上拉过程它在不停闪动,这就是当前 App 发出的获取数据的请求被 Charles 捕获到了。

为了验证其正确性,我们点击查看其中一个条目的详情信息。切换到 Contents 选项卡,这时我们发现一些 JSON 数据,核对一下结果,结果有 results 字段,每一个条目的 name 字段就是电影的信息,这与 App 里面呈现的内容是完全一致的,如图所示。

这时可以确定,此请求对应的接口就是获取电影数据的接口。这样我们就成功捕获到了在上拉刷新的过程中发生的请求和响应内容。

分析

现在分析一下这个请求和响应的详细信息。首先可以回到 Overview 选项卡,上方显示了请求的接口 URL,接着是响应状态 Status Code、请求方式 Method 等,如图所示。

这个结果和原本在 Web 端用浏览器开发者工具内捕获到的结果形式是类似的。

接下来点击 Contents 选项卡,查看该请求和响应的详情信息。

上半部分显示的是 Request 的信息,下半部分显示的是 Response 的信息。比如针对 Reqeust,我们切换到 Headers 选项卡即可看到该 Request 的 Headers 信息,针对 Response,我们切换到 JSON Text 选项卡即可看到该 Response 的 Body 信息,并且该内容已经被格式化,如图所示。

由于这个请求是 GET 请求,所以我们还需要关心的就是 GET 的参数信息,切换到 Query String 选项卡即可查看,如图所示。

这样我们就成功抓取到了 App 中的电影数据接口的请求和响应,并且可以查看 Response 返回的 JSON 数据。

至于其他 App,我们同样可以使用这样的方式来分析。如果我们可以直接分析得到请求的 URL 和参数的规律,直接用程序模拟即可批量抓取。

重发

Charles 还有一个强大功能,它可以将捕获到的请求加以修改并发送修改后的请求。点击上方的修改按钮,左侧列表就多了一个以编辑图标为开头的链接,这就代表此链接对应的请求正在被我们修改,如图所示。

我们可以将参数中的某个字段修改下,比如这里将 offset 字段由 0 修改为 10。这时我们已经对原来请求携带的 Query 参数做了修改,然后点击下方的 Execute 按钮即可执行修改后的请求,如图所示。

可以发现左侧列表再次出现了接口的请求结果,内容变成了第 11~20 条内容,如图所示。

有了这个功能,我们就可以方便地使用 Charles 来做调试,可以通过修改参数、接口等来测试不同请求的响应状态,就可以知道哪些参数是必要的哪些是不必要的,以及参数分别有什么规律,最后得到一个最简单的接口和参数形式以供程序模拟调用使用。

模拟

现在我们已经成功完成了抓包操作了,所有的请求一目了然,请求的 URL 就是 https://dynamic1.scrape.cuiqingcai.com/api/movie/,后面跟了两个 GET 请求参数。经过观察,可以很轻松地发现 offset 就是偏移量,limit 就是一次请求要返回的结果数量。比如 offset 为 20,limit 为 10,就代表获取第 21~30 条数据。另外我们通过观察发现一共就是 100 条数据,offset 从 0 到 90 遍历即可。

接下来我们用 Python 简单实现一下模拟请求即可,这里写法一些从简了,代码如下:

import requestsBASE_URL = 'https://dynamic1.scrape.cuiqingcai.com/api/movie?offset={offset}&limit=10'
for i in range(0, 10):offset = i * 10url = BASE_URL.format(offset=offset)data = requests.get(url).json()print('data', data)

运行结果如下:

data {'count': 100, 'results': [{'id': 1, 'name': '霸王别姬', 'alias': 'Farewell My Concubine', 'cover': 'https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c', 'categories': ['剧情', '爱情'], 'published_at': '1993-07-26', 'minute': 171, 'score': 9.5, 'regions': ['中国大陆', '中国香港']}, {'id': 2, 'name': '这个杀手不太冷', 'alias': 'Léon', 'cover': ... 'published_at': '1995-07-15', 'minute': 89, 'score': 9.0, 'regions': ['美国']}]}data {'count': 100, 'results': [{'id': 11, 'name': 'V字仇杀队', 'alias': 'V for Vendetta', 'cover': 'https://p1.meituan.net/movie/06ec3c1c647942b1e40bca84036014e9490863.jpg@464w_644h_1e_1c', 'categories': ['剧情', '动作', '科幻', '惊悚'], 'published_at': '2005-12-11', 'minute': 132, 'score': 8.9, 'regions': ['美国', '英国', '德国']}, ... 'categories': ['纪录片'], 'published_at': '2001-12-12', 'minute': 98, 'score': 9.1, 'regions': ['法国', '德国', '意大利', '西班牙', '瑞士']}]}data {'count': 100, 'results': [{'id': 21, 'name': '黄金三镖客', 'alias': 'Il buono, il brutto, il cattivo.', 'cover': ...

可以看到每个请求都被我们轻松模拟实现了,数据也被爬取下来了。

由于这个 App 的接口没有任何加密,所以仅仅靠抓包完之后观察规律我们就能轻松完成 App 接口的模拟爬取。

结语

以上内容便是通过 Charles 抓包分析 App 请求的过程。通过 Charles,我们成功抓取 App 中流经的网络数据包,捕获原始的数据,还可以修改原始请求和重新发起修改后的请求进行接口测试。

知道了请求和响应的具体信息,如果我们可以分析得到请求的 URL 和参数的规律,直接用程序模拟即可批量抓取,这当然最好不过了。

但是随着技术的发展,App 接

第31讲:抓包利器 Charles 的使用相关推荐

  1. 十九、抓包利器Charles的使用

    @Author:Runsen 文章目录 介绍 下载 设置HTTPS证书 连接手机 介绍 Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为 ...

  2. App 抓包利器:Charles 以及 App 爬虫心得

    整理不易,欢迎关注公众号:AI悦创,如果你想快速入门点击此阅读: https://mp.weixin.qq.com/s/hxWpw5lydfRyqki45xly1Q 公众号:AI悦创 1. 前言 介绍 ...

  3. mac下的抓包工具Charles

    2019独角兽企业重金招聘Python工程师标准>>> 在mac下面,居然没有好的抓包工具,这让我十分纠结,毕竟不可能为了抓一个http包就跑到win下折腾.或许有人说tcpdump ...

  4. 抓包工具Charles简单使用介绍(可抓取Android中app的请求)

    摘自: 作者:Roy_Liang链接:http://www.jianshu.com/p/5539599c7a25 Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安 ...

  5. 【Tools】抓包工具——Charles(中名:花瓶)

    目录 01.Charles介绍 02.Charles功能 03.使用背景 04.Charles下载 05.版权声明 01.Charles介绍 Charles 是在 PC 端常用的网络封包截取工具,在做 ...

  6. 抓包工具 Charles使用教程---抓取接口数据

    1.抓包工具 Charles下载地址:https://xclient.info/s/charles.html#versions 2.使用教程:https://www.jianshu.com/p/fc2 ...

  7. 抓包工具 charles 在线破解方法,支持4.2.6版本

    抓包工具 charles 在线破解方法 第一步:首先下载合适版本的charles进行安装 官方下载地址: https://www.charlesproxy.com/download/ 第二步:点击立即 ...

  8. 【爬虫】网页抓包工具--Charles的使用教程

    抓包工具Charles的使用教程 参考:https://zhubangbang.com/charlesproxy 如果您是您一次使用Charles,可能对下面的感兴趣. Charles破解版免费下载和 ...

  9. 网络抓包工具Charles的介绍与使用

    在复杂的App开发过程中,我们会涉及各种复杂的网络操作,各种API的调用和数据接收.如果我们只是通过控制台来查看网络的输入输出,就会非常麻烦.在Mac上有一款非常优秀的网络抓包工具--Charles, ...

最新文章

  1. gevent.hub.LoopExit: ('This operation would block forever
  2. Windows下将nginx安装为服务运行
  3. 记录一次线上超时异常查询
  4. 政务外网001---政务外网介绍
  5. mysql 字段有正负值的时候 sum无效_京东金融数据分析:MySQL+HIVE的结合应用案例详解...
  6. 通过JS改变框架的src
  7. k2pbreed刷高恪教程_从breed一键刷机工作
  8. git-commit-amend踩坑
  9. 理解 this.initialize.apply ( this, arguments )
  10. 命令与征服3:泰伯利亚战争和红警:共和国之辉
  11. Unity5.1 新的网络引擎UNET(一) 概括1
  12. 微信小程序--图片相关问题合辑
  13. 计算机病毒的关键技术,计算机病毒实验系统关键技术研究与实现
  14. Proguard的介绍
  15. k8s篇-网络-Ingress对象详解
  16. iqoo手机如何在桌面显示自己的生日提醒事项
  17. MIT 6.S081 Lab4 traps
  18. 2023开放原子校源行(北京站)成功举办,启航开源新生力量培养
  19. 思科nexus虚拟交换之开机初始化配置(Nexus7K、Nexus5K等)
  20. 音视频播放器关键技术探讨

热门文章

  1. SpringCloud与子项目版本兼容说明
  2. java课后习题_【整理】java私塾教程课后习题
  3. mysql的主键有什么作用_mysql设置主键有什么用
  4. java11开源中国,Java 11 正式发布!
  5. linux中fg jobs ctrl-z bg操作和kill-15、kill-9杀死进程
  6. 电机串电阻会有什么影响?
  7. 复习webpack4之Code Splitting
  8. SSM项目使用GoEasy 获取客户端上下线实时状态变化及在线客户列表
  9. foreman源NO_PUBKEY 6F8600B9563278F6
  10. 深入解析Java字节码和字节码操作类库ASM源码解析