愉快的了解Charles
charles是PC端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。除了在做移动开发中调式端口外,charles也可以用于分析第三方应用的通讯协议。配合chales的SSL功能,Charles还可以分析Https协议。
charles通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
该软件是用Java写的,能够在windows,mac,linux上使用。开发ios都在mac系统上吧,安装charles的时候要先装好java环境
青花瓷Charles工具大郅原理
charles作为一个中间人代理,在客户端给服务器端发消息的时候,会截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信。服务器返回数据时将截取的数据发送给客户端
伪装成服务器与客户端进行通信
charles主要的功能包括
- 截取Http和Https网路封包
- 支持重发网络请求,方便后端调试
- 支持修改网络请求参数
- 支持网络请求的截获并动态修改
- 支持模拟慢速网络
- 支持SSL代理。可以截取分析SSL的请求
- 支持AJAX调试。可以自动将JSON或XML数据格式化,方便查看
安装Charles
安装:打开浏览器访问Charles官网https://www.charlesproxy.com/,下载相应系统的Charles安装包,然后一键安装即可,直接下载安装即可,过程比较简单。破解:官方版本只支持免费使用30天,可通过替换安装包内容中的 charles.jar 文件进行破解。
或者用老师给的直接用接收的或者是已有的然后进行安装将 Charles 设置成系统代理
在之前的简介里有提到过,Charles 是通过将自己设置成代理服务器来完成封包截取的,所以使用 Charles 的第一步是将其设置成系统的代理服务器。
启动 Charles 后,第一次 Charles 会请求你给它设置系统代理的权限。你可以输入登录密码授予 Charles 该权限。你也可以忽略该请求,然后在需要将 Charles 设置成系统代理时,选择菜单中的 “Proxy” -> “Mac OS X Proxy” 来将 Charles 设置成系统代理。
Charles主界面介绍



Charles主界面介绍(请求导航栏)
charles提供两种查看封包的页签
一个是structure,另一个是Sequence
- structure:树状结构显示,将网络请求按访问的域名分类
- sequence:水平结构显示,将网络请求按访问的时间排序
任何程序都可以在charles中的structure窗口中看到访问的域名


从上至下的图标解释:
扫把按钮:点击之后可清除抓取到的所有请求
图标按钮:红点亮起说明正在抓取请求,红点展示为灰色说明目前不在抓取请求状态
乌龟按钮:灰色乌龟是网速设置正常,绿色乌龟指慢速网速开启了
六角形图标:断点图标,灰色说明断点未开启,红色说明在使用断点
钢笔图标:编辑请求,点击之后可以修改请求的内容
刷新图标:重复发送请求的图标,先选定某一请求点击该图标则请求会被再次发送
扳手图标:对应于导航栏中的tools图标,有些许功能
设置图标:设置charles中的情况
File:文件
Edit:编辑
View:视图
Proxy:代理服务器
Tools:工具
Window:窗口
Help:帮助

黄色区展示的是某一制定请求的请求内容,可以切换导航栏查看请求的各种详细情况。例如:请求响应时间,请求头,请求详细内容,请求体等各种情况。
我们先看一下常用的几个选项:
Overview:会展示该请求的一个大体情况,例如:请求头,请求响应结束时间,请求开始时间以及自己的notes等
content:如上图所示的该请求的具体内容和服务器的相应内容(配合下面的导航栏进行查看该请求的具体内容header,cookies&&选择呈现方式form,raw)
summary:也是展示一个该请求的大体资源分布情况。例如:服务器响应了多长时间,host是什么等等
chart:以表格形式告诉我们一个响应时间的分布情况。
notes:已经很清楚了,点击之后自己可以对该请求记录一些东西,方便后续查看该接口的用途,可在overview中查看

绿色区展示的是请求相应内容。同样,是点击导航栏会展示响应内容的详细情况。
header:响应的头信息
text:文本形式展示响应内容
hex(16进制)和compressed(压缩)一般不予查看
json:以json格式查看响应内容内容,简单明了
json text:将json格式的内容展开书写
raw:详情内容的详细情况
Proxy菜单

Tools菜单

charles的http协议

HTTP状态码
| 状态码 | 响应类别 | 原因短语 |
|---|---|---|
| 1XX | 信息性状态码(Informational) | 服务器正在处理请求 |
| 2XX | 成功状态码(Success) | 请求已正常处理 ,完毕 |
| 3XX | 重定向状态码(Redirection) | 需要进行额外操作已完成请求 |
| 4XX | 客户端错误状态码(Client Error) | 客户端原因导致服务器无法处理请求 |
| 5XX | 服务器错误状态码(Server Error) | 服务器原因导致处理请求出错 |
| 状态码 | 响应类别 | 原因短语 |
|---|---|---|
| 200 | OK | 客户端请求成功 |
| 400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
| 401 | Unauthorized | 请求未经授权,这个状态码必须和WWW=Authenticate报头域一起使用 |
| 403 | Forbidden | 服务器收到请求,但是拒绝提供服务 |
| 404 | Not Found | 请求资源不存在,eg :输入了错误的URL |
| 500 | Internal Server Error | 服务器发生不可预期的错误 |
| 503 | Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
截取安卓手机,Iphone上的网络封包
Charles 通常用来截取本地上的网络封包,但是当我们需要时,我们也可以用来截取其它设备上的网络请求,抓取移动设备发送的Http请求先将移动设备连接到Charles客户端,下面我们就讲解如何进行相应操作Charles 上的设置
查看本机连接无线网络的IP地址,这个地址作为移动设备连接Charles客户端的代理地址,移动设备必须要和计算机在同一网络中才能连接上。
打开Charles客户端,点击Proxy->Proxy Settings菜单,可以设置移动设备连接到Charles的端口,这样移动设备代理配置需要的ip地址和端口号都有了。
Charles是通过将自己设置成代理服务器来完成抓包的,勾选系统代理后,本地系统(如果通过浏览器发送请求)发送出去的请求都能被截取下来。因此,如果想只抓取手机APP发送的请求的话,可以不勾选WindowsProxy选项,这样在测试时就不会被本机Http请求所干扰。
另外,如果想要抓取浏览器发送的请求包,勾选WindowsProxy选项之后还是抓取失败,可能是浏览器没有设置成使用系统的代理服务器,只要设置成使用系统的代理服务器,或者将浏览器的代理服务器设置成127.0.0.1:8888也可以成功。
获取所在电脑的Ip地址
首先我们需要获取所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址
Windows + R 然后CMD去到黑色命令窗口,输入ipconfig / all然后按下回车键,接下来就可以找到所在电脑的IP地址了,“IP Address……192.168.1.100”
打开电脑的控制面板,找到 “网络和共享中心”,双击点开,找到本地连接,点开,然后就会自动弹出本地的连接状态的对话框,找到“详细信息”点开,这时就会弹出详细的信息窗口,在列表中我们可以找到IPv4就是我们要找的ip地址了
截取安卓手机,iPhone上的网络封包
在 iPhone 和安卓的 “ 设置 “中的” 无线局域网 “ 中,我们可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888
设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单,点击 “Allow” 即可完成设置。
断点功能
方法:
在会话列表中右键点击某个会话,然后在菜单中选择Breakpoints;
通过Proxy-Breakpoint settings...中手动新建/启用某个断点;要求勾选enable breakpoints
之后当下次再有该请求时,会自动进入断点模式;
一个完整请求会进入断点模式2次:
request的发出之前;收到服务器的response但尚未返回给客户端的时候;
断点request的时候,可以修改request信息,不过我们程序都有对请求header做校验和处理,修改参数后一般就直接报错了,所以看看response就好

模拟慢速网络(弱网)
在做移动开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles 对此需求提供了很好的支持。
点击上方菜单栏 –> Proxy –> Throttling Settings,打开Throttling Settings弹窗。
勾选Enable Throttling,开启限网功能。

在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。
(自行选择,如果不是很明显的话那就调到56 kbps Modem)
(当然,也可以自定义网络设置,看个人或者是需求)

如果只想对特定地址的请求进行弱网测试,,勾选Only for selected hosts,添加请求地址的信息。
对特定地址的请求进行弱网测试


过滤网络请求
通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://yuantiku.com , 那么只需要在 Filter 栏中填入 yuantiku 即可。
方法二:在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。



修改网络请求内容
有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键,选择 “Edit”,即可创建一个可编辑的网络请求
我们可以修改该请求的任何信息,包括 URL 地址、端口、参数等,之后点击 “Execute” 即可发送该修改后的网络请求(如下图所示)。Charles 支持我们多次修改和发送该请求,这对于我们和服务器端调试接口非常方便

给服务器做压力测试
我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下。
我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项
接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。

下面的图中,选择了三个接口,每次迭代中3个接口同时请求,迭代1000次(总计请求3000次接口),
每个接口每次并发100次请求。

模拟 接口404/403返回值(blacklist方法)

2.允许启用黑名单功能,选择接口返回错误的形式(404 或者403),添加接口地址并保存


注:【blocking connection】 选项可以选择“drop connection”或者 “403 respose”.前者接口会直接返回404错误,后者接口返回403错误

再次请求

屏蔽Web网页的抓包信息(Proxy)
应用场景:屏蔽web网页的抓包信息
proxy-->windows proxy(前面没有对勾,就不会抓到 PC浏览器的包)
proxy-->macOS proxy(mac电脑)

Get与post请求的区别
1、GET使用URL或Cookie传参。而POST将数据放在BODY中。
2、GET的URL会有长度上的限制,2kb,则POST的数据则可以非常大。
3、POST比GET安全,因为数据在地址栏上不可见。
4、一般get请求用来获取数据,post请求用来发送数据。
Cookie与Session
Session和Cookie的主要区别在于:Cookie是把数据保存在浏览器端的内存中Session把数据保存在服务器端的内存中
cookie与session的联系:
当服务器端生成一个session时就会向客户端发送一个cookie保存在客户端,这个cookie保存的是session的sessionId。。这样才能保证客户端发起请求后客户端已经登录的用户能够与服务器端成千上万的session中准确匹配到已经保存了该用户信息的session,同时也能够确保不同页面之间传值时的正确匹

浙公网安备 33010602011771号