Charles 简介 总结 HTTP 抓包 代理 [MD]
目录
- 目录
- Charles 简介
- 入门
- 视图模式
- 工具栏
- 内容区域
- 常用功能
- 重复请求 Repeat
- 查找功能 Find
- 监控过滤 Recording Settings
- 仅关注指定请求 Focus
- 模拟网络限速 Throttle
- 构造和修改请求 Compose
- 设置断点 Breakpoints
- 重写功能 Rewrite
- 黑白名单 Block/Allow List
- 核心功能
- Windows、Mac 上抓包
- Android、iOS 上抓包
- 启用 SSL 代理
- Windows、Mac 上抓包
- Android、iOS 上抓包
- 响应重定向 Map local
- 请求重定向 Map remote
| 我的GitHub | 我的博客 | 我的微信 | 我的邮箱 |
|---|---|---|---|
| baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
目录
Charles 简介
官网
官方下载地址
Charles 破解工具
参考这篇文章
Charles 是一个支持多平台的 HTTP 代理器、HTTP 监控、反向代理器。它能够让开发者查看本地机器与互联网之间的所有 HTTP 以及 SSL/HTTPS 传输数据。包括请求数据、响应数据 以及 HTTP 头部信息(包括 Cookie 和缓存信息)。
Charles 通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。
Charles的主要功能:
- 支持SSL代理。可以截取分析SSL的请求。
- 可以模拟慢速网络,以及等待时间(latency)较长的请求。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获和动态修改。
- 支持端口映射。
- 支持反向代理。
- 支持SOCKS。
入门
视图模式
Charles支持两种模式,Structure和Sequence,其特点分别如下:
- Structure:按照不同hosts域名分组展示请求。点击
+之后便可以展开该 host 域名下的所有请求,可以很清晰的看到请求的数据结构。适合对单一系列的访问请求从宏观上进行把握,可以快速定位。 - Sequence:可以看到全部请求,不用一层一层的去点开,这里是
以数据请求的顺序去显示的。适合精确定位内容,因为每条 sequence 都有size、status等属性信息,方便快速定位这条结果的价值。
工具栏

清除会话记录:点击之后可清除抓取到的所有请求开始/停止抓取会话记录:红色说明正在抓取请求,灰色说明目前不在抓取请求状态开始/停止SSL代理:是否启用SSL代理,锁打开状态代表开启、锁关闭状态代表停止开启/停止限流:灰色乌龟是网速设置正常,绿色乌龟指慢速网速开启了开启/关闭断点:灰色说明断点未开启,红色说明在使用断点编辑会话:点击之后可以修改请求的内容,修改后可执行此请求重新发一遍请求:先选定某一请求,点击该图标则请求会被再次发送该请求验证响应:工具:各种常用工具的快捷入口配置:各种常用设置的快捷入口
内容区域
概览
Overview:【重要】会展示该请求的一个大体情况,例如:请求头、请求开始时间、响应大小、自己的notes等content:【重要】请求和响应的详细内容,配合下面的导航栏进行查看summary:展示一个该请求的大体资源分布情况,例如:服务器响应了多长时间,host是什么等等chart:以表格形式告诉我们一个响应时间的分布情况notes:点击之后自己可以对该请求记录一些东西,方便后续查看该接口的用途,可在overview中查看;map等操作后会自动添加相应的notes信息
request/response
header:详细的请求/响应头信息query string:以表格形式展示请求时携带的查询参数cookies:以表格的形式展示请求中的 Cookie 信息raw:完整的原始请求/响应的【原始信息】hex、compressed:以十六进制、压缩形式显示响应体,一般不予查看text:以文本形式显示请求/响应体JavaScript、json、json text:以json形式显示请求/响应体
常用功能
重复请求 Repeat
我们可以使用 Charles 的Repeat功能来简单地测试服务器的并发处理能力,方法如下:
我们在想打压的网络请求上右击,然后选择Advanced Repeat菜单项,接着我们就可以在弹出的对话框中,选择打压的并发线程数 concurrency、打压次数 iterations、重复间隔 Repeat delay,确定之后,即可开始打压。
查找功能 Find
通过Edit -> Find或使用快捷键 ctrl+F 即可打开查找面板。
支持通配符和正则表达式,支持选择查找范围(所有Session、指定Path),支持自定义查找类别(url、header、body),双击查找结果会跳到想要的结果
监控过滤 Recording Settings
可以对网络请求进行过滤,只监控向指定服务器发送的请求。
在 Proxy -> Recording Settings 中可以设置网络包的过滤选项,过滤选项中有 Include 和 Exclude 两种选项,只有当 Include 为空时,Exclude 中的设置才会生效。过滤条件支持通配符。
Include:Only requests that match one of the locations below will be recorded. If this list is empty , all requests will be recorded unless otherwise excluded. 除非另有排除。
仅关注指定请求 Focus
使用 Focus 功能指定想要查看的域名,可以避免这个域名相关的请求淹没在茫茫请求当中。
对想要Focus的域名,右键菜单-选择Focus,这个域名就会添加到Focused列表,可以在 View -> Focused Hosts 组织所有想要Focus的列表
- 在Structure模式下,不在Focus列表中的请求会被折叠起来
- 在Sequence模式下,可以通过勾选
Focused复选框隐藏不在Focus列表中的请求
模拟网络限速 Throttle
在做移动端开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下应用的表现是否正常。Charles对此需求提供了很好的支持。
在Charles的菜单上,选择 Proxy -> Throttle Setting 项,在之后弹出的对话框中,我们可以勾选上Enable Throttling,然后设置 Throttle Preset(限流预值) 等。
如果只想模拟指定网站的慢速网络,可以再勾选图中Only for selected hosts选项。然后在对话框的下半部分设置中增加指定的Hosts项即可。
也可以通过点击工具栏上小乌龟的图标开启或停止限流。
构造和修改请求 Compose
点击Compose按钮就可以构造一个自定义的请求,可以随便添加 Headers 或者query等参数,然后点击Execute就可以得到想要的报文了。
在网络请求上单击右键,选择Compose,可创建一个基于原始请求但可编辑的网络请求。可以修改该请求的任何信息,包括URL、端口,参数等。修改完后,单击Execute按钮,即可发送修改后的网络请求。
设置断点 Breakpoints
Intercept and edit requests and responses before they are sent and received
和我们在 IDE 上设置断点一样,在断点处会进入调试模式,请求会暂时中断,这时我们可以进行一些自定义的操作。
首先点击菜单中的图标或Proxy -> Breakpoint Settings -> Enable Breakpoints开启断点功能,然后再到想要设置断点的请求上,右键Breakpoints设置一个断点即可开启此请求的断点。
我们可以在Proxy-> Breakpoints Settings查看这个断点是否加入到断点设置面板,设置断点后默认是同时拦截请求和响应,更多内容可以双击设置。
设置完成后,Charles在遇到此请求时会弹出中断对话框。在中断对话框中,用户可以点击 Edit Request 来编辑请求的内容,编辑完成后点击 Execute 发出去这个请求给服务端。
发出请求后,断点再一次生效,不过这次是拦截了响应,同样,我们可以在响应返回到客户端之前根据需要修改响应报文。
需要注意一点:数据被拦截后,客户端的请求超时时长是不会停止计算的,如果没在设置的超时时间内返回数据,本次请求也就按失败处理了。
重写功能 Rewrite
Rewrite 可以通过正则表达式匹配并添加、修改、删除请求或响应中的头部header参数、主体内容、请求参数、响应状态、Host/Path/URL。功能非常强大、配置也非常简单。
首先在菜单栏找到Tools-Rewrite..打开设置面板,然后点击Enable Rewrite启用重写功能,然后点击Add添加匹配项,然后添加匹配域名、匹配规则等。
基本支持所有Header、Host、Path、URL、Query Param、Response Status、Body等信息的增删改,支持正则表达式。
Tips:
- 只支持字符串修改,而无法针对语义修改,例如不能修改json中某一key的值,只能在已知此key的值的情况下替换此值。
- Rewrite 一般用来修改Header、响应码等方便一些,用来修改 Body 的话用 Map 功能更方便一些
- 可以针对特定的标签做一些操作,例如针对