charles

本文介绍Charles在Windows上的常用功能。

1.Charles简介
2.如何安装Charles
3.将Charles设置成系统代理
4.Charles主界面介绍
5.过滤网络请求
6.获取手机上的网络封包
7.获取https通讯信息
8.模拟慢速网络
9.修改网络请求内容
10.给服务器做压力测试
11.修改服务器返回内容
12.反向代理
13.设置外部代理,解决与翻墙软件的冲突

一.Charles简介

Charles是常用的网络封包截取工具,在做移动开发时,为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。
Charles通过将自己设置成系统的网络访问代理服务器,似的所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
除了在做移动开发中调试端口外,Charles也可用于分析第三方应用的通讯协议。配合Charles的SSL功能,Charles还可以分析HTTPS协议。
Charles的主要功能包括:

1.截取Http和Https网络封包
2.支持重发网络请求,方便后端调试
3.支持修改请求参数
4.支持网络请求的截获并动态修改
5.支持模拟慢速网络

Charles4新增的主要功能包括:
  1. 支持http2
    2.支持IPv6

二.安装Charles

Charles官网(www.charlesproxy.com)下载最新版Charles安装包,是一个dmg后缀的文件,打开后将Charles拖到application目录下完成安装即可。

三。将Charles设置成系统代理

Charles是通过将自己设置成代理服务器来完成封包截取的,所以使用Charles的第一步是将Charles设置成系统的代理服务器。
启动Charles后,第一次Charles会请求你给他设置系统代理的权限,你可以输入登陆密码授予Charles该权限。也可以忽略该请求,然后在需要将Charles设置成系统代理的时,选择菜单中的proxy---->mac os x proxy设置成系统代理。(Windows:proxy---->windows proxy)


image.png

之后,就可以看到源源不断的网络请求出现在Charles的界面中。
需要注意的是,Chrome和Firefox浏览器默认并不使用系统的代理服务器设置,而Charles是通过吧自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取Chrome和Firefox浏览器的网络通讯内容。如果需要截取的话,在Chrome中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成127.0.0.1:8888也可达到相同的效果。

四。Charles主界面介绍

image.png

Charles主要提供两种查看封包的视图,分别为structure和sequence。
structure视图将网络请求按访问的域名分类。
sequence视图将网络请求按访问的时间排序
大家可根据具体的需求在这两种试图之间来回切换。
Charles提供了一个简单的filter功能,可以输入关键字来快速筛选出URL中带指定关键字的网络请求。
对于某一个具体的网络请求,你可以查看其详细的请求内容和相应内容。如果请求内容是post的表单,Charles会自动帮你将表单进行分项显示。如果响应内容是json格式,那么Charles可以自动帮你将json内容格式化,方便查看,如果响应内容是图片,那么Charles可以显示出图片的预览。

五.过滤网络请求

通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:

  • 方法一:
    在主界面的中部的filter栏中填入需要过滤出来的关键字。例如我们服务器的地址是www.58qf.com,那么在你需要在filter栏中填入58qf即可。
  • 方法二:
    在Charles的菜单栏中选择proxy---->Recording Settings,然后选择include栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。如图:


    image.png

    通常情况下,我们使用方法一做一些临时性的封包过滤,使用方法二做一些经常性的封包过滤。

  • 方法三:在想过滤的网络请求上右击,选择“focus”,之后在filter一栏勾选上focussedyiixang ,如下图所示:


    image.png

    这种方式可以临时性的,快速的过滤掉一些没有通过关键字的一类网络请求。

六.获取手机上的网络封包

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


image.png

手机上的设置:
首先我们要获取Charles运行所在电脑的IP地址,Charles的顶部菜单的help---->local IP Address,即可在弹出的对话框中看到IP地址,如下图:


image.png

这里显示的是ipv6,我暂时没找到怎么设置成显示ipv4,那就win+r执行ipconfig去那里找到ipv4地址吧。
(安卓手机)打开设置---->wlan---->长按公司内部WiFi的名字---->修改网络---->打开显示高级选项---->代理设置为手动---->填写Charles运行所在电脑的IP,以及8888端口。
设置好之后,就可以在Charles上看到手机发出的请求。

七.获取HTTPS通讯信息

八.模拟慢速网络

在做移动开发的时候,我们常常要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles对此需求提供了很好的支持。
在Charles的菜单上,选择proxy---->throttle settings,在弹出的对话框中,勾选上enable throttling,并且可以设置throttling preset的类型。如图:


image.png

如果只想模拟制定网站的慢速网络,可以勾选上only for selected hosts,对话框的下半部分可以设置慢速网络的一些具体参数。

九.修改网络请求内容

有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键,选择edit,即可创建一个可编辑的网络请求。如下所示:

十.给服务器做压力测试

我们可以使用Charles的repeat功能来简单的测试服务器的并发处理能力,方法如下:
在想测试的服务器上右击,然后选择Repeat Advanced ,


image.png

在弹出的对话框中,可以选择打压的并发线程数和打压次数和请求延迟,确定之后,即可开始打压。


image.png

十一.修改服务器返回内容

有时,我们想让服务器返回一些我们想要的指定的内容,方便调试针对的一些特殊情况。例如列表页面为空的情况,数据异常的情况,部分耗时的网络请求超时的情况等。如果没有Charles,要服务器配合构造出相应的数据显得会比较麻烦。这种情况下,Charles的相关功能可以解决这个问题。
根据具体需求,Charles提供了Map、Rewrite、以及Breakpoints功能,都可以达到修改服务器的返回内容的目的,这三者的差异是:
1.Map功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。
2.Rewrite功能适合对网络请求进行一些正则替换。
3.Breakpoints功能适合做一些临时性的修改。

Map

charles 的 Map功能分为Map Remote 和Map Local两种。
Map Remote是将指定的网络请求重定向到另一个网址。
Map Local 是将指定的网络请求重定向到本地文件。

界面:
image.png

Map Remote 界面
image.png

对于Map Remote 功能,我们需要填写的有:网络重定向的源地址和目的地址。不限制的条件,可以留空。如下图:
image.png

Map Local 界面


image.png

对于Map Local功能,我们需要填写的是重定向的源地址和本地的目标文件。对于一些复杂的网络请求结果,我们可以先使用Charles提供的Save Response功能,将请求结果保存在本地存为一个文件(如下图),然后进行修改,成为我们的目标映射文件。
image.png

如下图,将一个指定的网络请求通过Map Local功能映射到了 本地一个经过修改的文件中。
image.png

Map Local 在使用的时候,有一个潜在的问题,就是其返回的Http Response Header与正常的请求并不一样。这个时候如果同时使用了Rewrite功能,将相关的Http头重写成我们希望的内容。
Rewrite
image.png

Rewrite 功能适合对某一类请求进行一些正则替换,以达到修改结果的目的。
例如,我们想修改某个API 的返回值,把里面的aabbcc全部换成ddeeff,
上图中,右上的框框,可以add进来我们想要去Rewrite的网络请求,或者说,在添加的这些个请求中,重写返回值。
右下的框框是设置正则替换规则的


image.png

这样就可以把上面添加的请求的返回值中所有的aabbcc替换为ddeeff。

Breakpoints

上面提供的Rewrite功能最适合做批量的和长期地替换,但是很多时候,我们只想临时修改一次网络请求,这时,使用Rewrite功能虽然也可以达到目的,但是过于麻烦,对于临时性的修改,Breakpoints功能更合适。
Breakpoints类似调试程序打断点,
当指定的网络请求发生时,charles 会截获该请求,这时,我们可以在Charles中临时修改网络请求的返回内容。
选中要修改的请求---->右键---->Breakpoints,设置完成后,charles再次抓取到该请求时会自动进入到调试模式。
进入到调试模式后可以修改请求报文,或者直接execute
请求报文发送成功后,charles会拦截服务器的返回数据,这里可以通过edit response修改返回数据,或者execute执行下一步。


image.png

十二.反向代理

Charles的反向代理功能允许我们将本地的端口映射到远程的一个端口上。例如,我将本机的59128端口映射到了www.baidu.com的80端口上。这样,当我访问本地的59128端口时,时机返回的内容由www.baidu.com的80端口提供。

image.png

十三.设置外部代理,解决与翻墙软件的冲突

Charles 的原理是将自己设置成系统的代理服务器,在各种请求响应中扮演一个枢纽,来扭转或者改变。翻墙软件的基本原理也是吧自己设置成系统的代理服务器,来做到透明的翻墙。Charles和翻墙软件都来代理的话,可能会起冲突,如果使用了翻墙软件,要关闭翻墙软件的自动设置,使其不主动修改系统代理,同时在Charles的External Proxy Settings中,设置翻墙代理端口和相关信息。

推荐阅读更多精彩内容