Charles使用

Charles简介

Charles是一个web代理器,用来截获数据包。 主要特性:

  • SSL Proxying——易清晰地文本展示HTTPS请求,控制HTTPS流量。
  • Bandwidth Throttling是用来模拟包括潜在的慢的网络连接
  • AJAX debugging——以文本或树形模式来展示XML和JSON的请求和响应
  • AMF——查看Flash Romoting的内容/以树的形式展示远程消息
  • 重复请求来测试后端的变化
  • 编辑请求来测试不同的输入
  • Breakpoints是用来拦截并编辑请求和响应的。
  • 使用W3C验证器来验证已记录的HTML,CSS,RSS以及原子的响应。

Charles的使用

下载安装包,安装,注册:在Help窗口内选择Register Charles。(如果不注册的话,使用Charles每30分钟它就会自动退出一次,所以还是注册了吧!)

***:

Registered name:Rajax Network Technology Co., Ltd.       

License key: 2dcd56e6f3cbacaa7e

将Charles设置成系统代理

启动Charles之后,第一次它会请求你给它设置系统代理的权限。你可以输入登录密码授予Charles该权限。如果你忽略了该请求,你可以通过选择菜单中的“Proxy”—>”Mac OS X Proxy“来将Charles设置成系统代理。

Charles使用

主界面简介:

Charles使用

Charles提供了两种查看视图,分别为“Structure”和"Sequence"。

1.Structure视图将网络请求按照访问的域名分类。

Charles使用

2.Sequence视图将网络请求按照访问的时间进行排序。]

Charles使用

工具条:

Charles使用

工具条从左到右的功能一次是: 1.新建一个会话

2.打开一个会话(已存在的)

3.关闭当前会话

4.存储当前会话

5.清除当前捕获的所有请求

6.搜索

7.开始/停止捕获

8.开始/停止网速模拟功能

9.开始/停止断点功能

10.刷新已选择的请求

11.编辑

12.验证响应(请求的结果)

13.工具

14.设置

过滤网络请求

有时我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,我们有2种办法:

1.在主界面的中部的Filter栏中填入需要过滤出来的关键字。

2.在Charles的菜单栏选择"Proxy"->"Recording Settings",然后选择Include栏,选择添加一个项目,然后填 入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。

(PS:一般,我们使用方法1做一些临时性的封包过滤,方法2做一些经常性的封包过滤。)

截取手机上的网络封包

1.Charles上的设置

要截取手机上的网络请求,我们首先需要将Charles的代理功能打开。在Charles的菜单栏上选择“Proxy”->"Proxy Settings",填入代理端口8888,并且勾上"Enable transparent HTTP proxying" 就完成了在Charles上的设置。

2.手机上的设置

1.我们需要获取Charles运行所在电脑的IP地址,打开Terminal,输入ifconfig en0, 即可获得该电脑的IP。

2.在手机的 “设置”->“WLAN“中,可以看到当前连接的wifi名,通过长按网络名称,弹出一个对话框,选择”修改网络配置“—>勾选”显示高级选项"可以看到在其最底部有“HTTP代理”一项,我们将其切换成手动,然后填上Charles运行所在的电脑的IP,以及端口号8888。(PS:每个人的手机都不同,所以个别细节会有差异)

3.设置好之后,我们打开iPhone上的任意需要网络通讯的程序,就可以看到Charles弹出iPhone请求连接的确认菜单(如下图所示),点击“Allow”即可完成设置。

Charles使用

截取SSL信息

Charles默认并不截取SSL的信息,如果你想对截取某个网站上的所有SSL网络请求,可以在该请求上右击,选择SSL proxy,如下图所示:

Charles使用

这样,对于该HOST上的所有SSL请求就都可以被截取到了。如果不需要的话,取消即可。

#模拟慢速网络

如果我们需要模拟慢速网络或者高延迟的网络,来测试在移动网络下,应用的表现是否正常。我们可以通过Charles进行设置。 在Charles的菜单上,选择"Proxy"->"Throttle Setting"项,在之后弹出的对话框中,我们可以勾选上“Enable Throttling”,并且可以设置Throttle Preset的类型。如果只想模拟指定网站的慢速网络,可以勾选图中的"Only for selected hosts"项,然后在对话框的下半部分设置中增加指定的hosts项即可。如下图所示:

Charles使用

修改网络请求内容

Charles提供网络请求的修改和重发功能。我们只需要在已有的网络请求上右键点击,选择”Edit“,即可创建一个可编辑的网络请求。如图所示:

Charles使用

我们可以修改该请求的任何信息,包括url地址,端口,参数等,之后点击“Execute”即可发送该修改后的网络请求。(PS:Charles支持我们多次修改和发送请求)

更改返回数据来测试临界情况

这个是重点了。因为这种做法可以让一个iOS前端的开发人员独立完成测试而不用拉过来一个后端一起联调。并且各种特殊维度,或是临界的账号也不用再去辛苦找了,仅仅自己在Charles上改来改去就可以达到效果了。比如这个地方如果返回了nil程序会不会崩,直接改response就行了。下面是具体操作方案。

打开Charles切换成结构页面

Charles使用

这里可以看到断点和调试信息

Charles使用

Charles使用

然后找一个饿了么的页面。这个页面本来应该返回是这样的:如上图右边

你先正常的打开这个页面把玩几下,这个Charles就会抓取很多接口和域名分类了。在这里找到你这个页面所属的域名分类应该不难。然后打上断点。这里要注意是在域名上打断点而不是在下面的单个请求上打断点。

再次用手机进入这个页面,就会通过你刚才打断点的那个域名来请求数据,就会被断点拦住,如下图所示。

Charles使用

右边的信息也很清晰,一开始可以编辑请求。如果点击单步执行,等一下相应回来了也可以编辑响应。

Charles使用

Charles使用

这里的有好几种查看的方式,但是推荐使用JSON Text看的比较清楚。 现在我们对拦截回来的数据进行修改,我把第三个的time_spent从40改成140如下图

Charles使用

然后再次点击下方的Execute单步执行,更改后的数据就会像正常返回回来的数据那样显示到,APP的页面上展示。

Charles使用

能来到这一步就说明已经完整的掌握了用Charles篡改返回数据测试App的技术。

Charles使用