一、Charles教程
(一)Charles使用教程 

Charles是一个HTTP代理/ HTTP监视器/反向代理,能够查看其机器和Internet之间的所有HTTP和SSL / HTTPS流量。这包括请求,响应和HTTP标头(包含cookie和缓存信息)

Charles 是在 Mac /Windows下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。

Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。

除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议

推荐购买正版Charles 

Charles: 网络封包分析 开发者调试工具
购买正版Charles地址:数码荔枝商城
正版的优点:
可以使用账号登录,具有完美的用户体验,有问题可以直接发工单,不用心惊胆战的担心突然不能用了;
盗版因为不能用账号登录,一般数据也都是临时的,不能使用云相关的功能。
可以使用最新版的软件功能,整体体验非常好;
不到200块的价格,购买Charles后,一次购买,终身使用,非常的实惠。
Charles 相关 
如果您有前端测试的需求,推荐 SwitchHosts 这个小工具,当然您如果对 chrome 浏览器的在线改 host 感兴趣,也可以用下 Host Switch Plus

Charles 和 windows 下的 Fiddler 都是同性质的代理抓包工具;

我常借用 Charles 做这些事情
抓取 Http 和 Https 的请求和响应,抓包是最常用的了。
重发网络请求,方便后端调试,复杂和特殊情况下的一件重发还是非常爽的(捕获的记录,直接 repeat 就可以了,如果想修改还可以修改)。
修改网络请求参数(客户端向服务器发送的时候,可以修改后再转发出去)。
网络请求的截获和动态修改。
支持模拟慢速网络,主要是模仿手机上的 2G/3G/4G 的访问流程。
支持本地映射和远程映射,比如你可以把线上资源映射到本地某个文件夹下,这样可以方面的处理一些特殊情况下的 bug 和线上调试(网络的 css,js 等资源用的是本地代码,这些你可以本地随便修改,数据之类的都是线上的环境,方面在线调试);
可以抓手机端访问的资源(如果是配置 HOST 的环境,手机可以借用 host 配置进入测试环境)
charles 相当于一个插在服务器和客户端之间的“过滤器”
当客户端向服务器发起请求的时候,先到 charles 进行过滤,然后 charles 在把最终的数据发送给服务器;

注意:此时 charles 发给服务器的数据,不一定是客户端请求的数据;charles 在接到客户端的请求时可以自由的修改数据,甚至可以直接 Block 客户端发的请求;

服务器接收请求后的返回数据,也会先到 charles,经过 charles 过滤后再发给客户端;

同理:客户端接收的数据,不一定就是服务器返回的数据,而是 charles 给的数据。

注意问题
如果想要抓包,第一件事情,就是把 charles 设置成为本机和服务端之间的”过滤器”;

让所有的网络请求全部经过 charles,这样就可以捕获并记录到你请求的内容和返回数据了,原理请参照上面那张图片;需要注意的是,如果你访问的是 web,可以把所有请求抓到;

但如果你想抓某些应用(比如手机上的应用等),应用使用的某些资源,如果没有向服务器发送请求,而是通过调用内部资源的方式进行展现,那么此时 charles 是抓不到的;验证这个的方式很简单,就是把网络断掉后,如果还可以继续展现,就是属于调用内部资源的,这种时候就不要想着通过抓包工具来捕获资源了,他都没有像服务器发起请求,手机点烂也抓不到的。

第一次启动 Charles
启动 Charles 后,第一次 Charles 会询问你是否把 Charles 设置为系统的代理,如果此时你忽略了这个询问敞口,你可以在后期设置的;将 Charles 设置成系统代理:选择菜单中的 “Proxy” -> “Mac OS X Proxy/windows proxy” 来将 Charles 设置成系统代理,参考如下,如果 Mac 下有管理密码,需要输入密码后方可进行。

(二)Charles官网
请认准 charles 唯一官网 : www.charlesproxy.com

(三)Charles下载&安装
Charles下载地址:https://www.charlesproxy.com/latest-release/download.do

根据不同的系统,选择对应的链接下载

Charles使用教程-编程知识网

Charles安装
window安装,Charles下载后,打开安装程序,按照提示一路下一步,就可以安装成功了

(四)Charles破解
软件开发不易,请尽量支持 Charles 正版!推荐购买正版Charles

Charles 破解原理一:文件覆盖
Charles 4.X.X

下载Charles v4.X.X 并安装 Charles 下载
安装后先打开 Charles 一次(Windows 版可以忽略此步骤)
下载破解文件 charles.jar
替换掉原文件夹里的charles.jar
MAC,选择 Charles, 选择显示包内容;找到 /Java/charles.jar 所在的目录,把破解文件覆盖即可
windows 系统;\lib 下面的 charles.jar,把破解文件覆盖即可
完成!
Charles 破解原理二:注册码进行注册
在Help窗口内选择 Register Charles。

Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
这是属于注册码进行注册的方式。

// 适用于Charles任意版本的注册码。
// Charles 4.2目前是最新版,可用。
(五)Charles抓包配置
proxy setting(代理设置)
设置的主界面如下:

Charles使用教程-编程知识网

动态端口

启用动态端口选项来监听动态端口,每次查询启动时选择。这样可以避免与计算机上可能运行的其他网络服务的冲突,包括Charles的其他实例(如果是共享计算机)如果你开的端口很多,搞到你自己都记不清楚了,那么推荐你用这个;但是我都是写好一个端口的,比如代理写8888,别的就不会监听这个端口了,而且为了手机方便连接,都是使用指定好的端口。

注意;如果你charles设置了8888的端口,别的服务就不能再使用这个端口号了,否则冲突会发生意外的错误。

透明的HTTP代理

透明代理使Charles能够支持不支持HTTP代理服务器的客户端,或者不知道他们正在使用HTTP代理服务器,例如TCP / IP连接由路由器或防火墙重定向到Charles。这里可以被手机连接;

手机连接的时候,http代理那里写=选手动,并填写此时charles的本机地址和上面设置的8888端口即可。

options 里 主要是设置 绕过代理

Charles使用教程-编程知识网

这里可以设置您的浏览器/操作系统遇到哪些域名的时候,使用默认而不用Charles;配置的列表使用空格或逗号分隔,并在Charles配置其代理设置时注入浏览器。

(六)Charles 设置HTTPS代理抓包方法及原理
PC设置https代理抓包
第一步:电脑端安装 Charles 的 CA 证书(必须)

1、在Charles的菜单栏上选择“Help”->“SSL Proxying”->"Install Charles Root Certificact",

Charles使用教程-编程知识网

出现证书安装页面,点击“安装证书(I)…”,进入证书导入向导,下一步…完成安装

Charles使用教程-编程知识网

第二步:电脑上charles的SSL抓取设置(必须)

charles并不是默认抓取ssl的,所以即使你安装完证书之后,Charles 默认也并不截取 Https的信息,你需要在SSL proxy里设置需要抓的域名,因为charles的location配置都是支持通配符的,所以在HOST里设置一个”*”就可以了,port不写;

Charles使用教程-编程知识网

Charles 手机抓包HTTPS设置以及证书安装
手机抓包的原理,和PC类似

第一步:设置charles为允许状态,并设置好接入端口;

在Charles的菜单栏上选择“Proxy”->“Proxy Settings”,填入代理端口8888(注意,这个端口不一定填写8888,也可以写别的端口,但是需要记住这个端口,因为这里设置的允许接入的端口,手机端配置的时候需要用到),并且勾上”Enable transparent HTTP proxying” 就完成了在Charles上的设置。如下图

Charles使用教程-编程知识网

需要找到charles的本机IP;点击HTLP -> local IP Address 可以看到当前的本机IP地址;

Charles使用教程-编程知识网

也可以在终端打开查看,比如window,cmd下;输入ipconfig可以查看本机的IP

Charles使用教程-编程知识网

如上,charles允许手机接入的IP和端口是10.36.198.189:8888 在浏览器输入 这个HOST会发现charles会提示一个窗口问你是否允许接入;点击Allow,即可接入代理

Charles使用教程-编程知识网

第二步:把手机按照charles的IP和端口进行配置;

手机链接wifi,wifi的HTTP代理选择手动那项(安卓类似)

在iPhone的 “设置”->“无线局域网“中,可以看到当前连接的wifi名,通过点击右边的详情键,可以看到当前连接上的wifi的详细信息,包括IP地址,子网掩码等信息。在其最底部有“HTTP代理”一项,我们将其切换成手动,然后填上Charles运行所在的电脑的IP,以及端口号8888

Charles使用教程-编程知识网

第三步,手机配对成功后,charles弹窗询问是否允许;

设置好之后,我们打开iPhone上的任意需要网络通讯的程序,就可以看到Charles弹出iPhone请求连接的确认菜单

Charles使用教程-编程知识网

如上图的弹窗,点击Allow即可;此时已经配对成功,开始愉快的抓包吧;

如果您的charles没有配置过,是抓取不到HTTPS这种加密协议的内容的;

如果需要抓取HTTPS网站的资源,请查看 Charles的HTTPS抓包方法及原理

注意:需要明白一个可能存在的弊端,如果你把手机的上网相关事情委托给了charles,那么当charles出错或者没有开启的时候,此时手机必定没有办法正常上网;这个一定要了解,因为很多人把手机的IP委托给charles进行代理后,第二天早晨上本的时候,手机wifi会默认链接你常用的高清度wifi;而此时的wifi的设置里面可能已经委托给charles了,但是此时电脑刚没有开charles或者重启后ip变动等;造成charles无法正常使用;由此而导致了无法上网的问题;

注意charles此种捕获方式,只能捕获发出请求的资源,如果是APP里,内部的代码和资源,因为没有向服务器发情请求,所以这是抓不到的;

判断是不是调用内部资源,你可以把手机的网络给断了,如果此时还可以正常的显示,说明该资源是写在APP内部的,通过代理的方式是抓不到的;

手机抓取https

手机安装SSL证书(如果你需要抓取手机访问的HTTPS网站,需要做此设置,但如果你不需要手机抓取HTTPS,就没有必要安装了)

和上面类似,也是HTLP下面的 SSL Proxying,选择”Install Charles Root Certificate on a Mobile Device or remote Browser” (在移动设备或远程浏览器上安装SSL证书)

然后会看到一个弹窗,提示你该怎么操作

Charles使用教程-编程知识网

configure your device to use charles as its HTTP proxy on 10.36.198.189.8888,then browse to chls.pro/ssl to download and install the certificate

大概的意思是让你把手机上的wifi信息设置了 HTTP代理,内容是10.36.198.189.8888;然后用浏览器浏览chls.pro/ssl就可以下载并安装证书了

手机安装证书:在浏览器中输入:chls.pro/ssl 下载安装证书即可(安卓建议不要用手机自带浏览器下载,可能会出现安装不上的情况,如果安装不上,找到设置->安全与隐私->加密和凭证->从存储设备安装(安卓下载证书或安装证书有问题建议使用其他浏览器下载)。Ios手机:1.设置->通用->描述文件与设备管理,安装证书;2.通用->关于本机->证书信任设置-开启)

二、Charles常见操作
(一)过滤域名
方法一:直接过滤域名;

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

Charles使用教程-编程知识网

方法二:修改Include的域名和端口

在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,

然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。

这样就可以只截取目标网站的封包了;

Charles使用教程-编程知识网

通常情况下,我们使用方法一做封包过滤,方法二做一些唯一的域名抓包,正常情况下,不推荐这种设置方法;

因为这种方法,你的charles只能抓你配置的域名;

如果某天早晨,你的charles一切正常,访问也正常,而且在active commections里也看到了某个域名的请求信息,但是在主界面死活看到获取到的信息;

不用着急,非常有可能是因为你设置了include的指定域名;

而且是设置后你忘记解除了,导致你一脸懵逼;

这种方法非常不推荐,太粗暴了,除非你这半个月都只看某个HOST下的信息,否则千万千万别这么搞,很容易在以后使用时候的忘记解除;

如果你只是为了更清楚的查看某个域名下的请求和响应信息,推荐使用结构视图模式下的焦点域名设置;那种模式比这种方法更好,下面是过滤焦点域名后在序列模式下的调用方法;

方法三:过滤焦点域名

①点击fillter后面的focused来筛选你的做的focus标记文件

Charles使用教程-编程知识网

②在目标的网络请求上右键,选中focus(此时,该域名已经被设置为一个焦点标记了;

Charles使用教程-编程知识网

你设置的焦点域名在"View"->”focused Hosts”里面可以查看和管理

Charles使用教程-编程知识网

Charles使用教程-编程知识网

结构视图,这种模式下的展现更加人性化;

当你设置某个域名为焦点域名的时候,会把当前域名单独显示在上面,

而其它的非焦点域名,都会在other Hosts里显示;

Charles使用教程-编程知识网

三、Charles主界面的介绍
主界面
Charles 主要提供两种查看封包的视图,分别名为

Structure
Structure/结构视图,将网络请求按访问的域名分类,比如某个域名下有n个资源请求,那么所有此域名下的请求都会在这里做一个详细的分类;
Sequence
Sequence/序列视图,将网络请求按访问的时间排序,按照你的电脑的发送请求顺序进行

Charles使用教程-编程知识网

contents是最常用的一个标签,其中上半部分是请求,下半部分是响应;

请求部分中,会根据请求的内容,而分为很多项;

比如如果是表单提交,还会有form的选项供你查看提交的内容(表格图形化的方式),

最后一项”Raw”是未经处理的请求信息,可以理解为,raw左侧的所有项目都是对raw信息的拆分和美化,以便直观查看;

当然响应区域的raw和其它项目的关系也是一样,响应部分的Raw是接收到的全部未处理信息;

如果响应内容是 JSON 格式的,那么 Charles 可以自动帮你将 JSON 内容格式化,方便你查看。

如果响应内容是图片,那么 Charles 可以显示出图片的预览

右键菜单
在网址、域名上右键

Charles使用教程-编程知识网

区域 1 基本操作 :基本的URL复制,文件保存,以及选中文件内搜索
区域 2 重写操作 :重写发送请求(调用接口合适),或者发到gitlist里
区域 3 查看区 :排序之类的
区域 4 设置关注 :可以设置哪些你关心的或者需要忽略的
区域 5 清除区 :垃圾清理使用
区域 6 工具区 :对应常见工具的入口
区域 7 映射区 :把文件映射到本地或者原创URL
在 overview区域 和 contents区域 右键

Charles使用教程-编程知识网

charles overview是请求文件的概览,对HTTP/s分析非常重要

四、Charles文件菜单
charles 文件菜单总结

file(文件菜单)

Charles使用教程-编程知识网

charles 创建新会话

使用方式1:File -> new session

使用方式2: Ctrl + N

这不是新的请求意思,是再开一个标签页,进行抓包的;

Edit(编辑菜单)

Charles使用教程-编程知识网

Charles使用教程-编程知识网

charles 偏好设置

偏好设置,注意作用如下

Charles使用教程-编程知识网

视图选项

Charles使用教程-编程知识网

启动设置

Charles使用教程-编程知识网

警告设置

Charles使用教程-编程知识网

焦点host

Focus Host是焦点域名

Charles使用教程-编程知识网

在序列视图的时候,选择focued后,就会只保留你的焦点域名

Charles使用教程-编程知识网

五、Charles代理菜单

Charles使用教程-编程知识网

一、常用功能开关区

stop/start recording 开始/暂停记录,需要注意就是后面的session1代表当前你将要操作的会话窗口;就是切换是否进行捕获记录
注意:这里的开关只是是否记录信息的开关,并不是charles的开关;也就是说如果你stop recording 那么只是界面上不再抓取信息了,charles还是一直会工作的

stop/start throttling 开始/暂停节流,就是模拟手机上2G/3G/4G的速度,对应工具栏的的小乌龟图标

Charles使用教程-编程知识网

一般选择多少网速就可以了,下面默认即可;

注意如果你本身网速快;是限速;如果你网速low,你选个100Mbps的,其实也到不了的;

enable/disable breakpoints 启用/禁用断点

Charles使用教程-编程知识网

当启用断点后,再次请求到该接口时,会出现断点界面,可以修改参数,修改后点击Execute即可执行

Charles使用教程-编程知识网

二、常用功能设置区

recording settings 记录设置

Charles使用教程-编程知识网

throttle settings 节流设置

Charles使用教程-编程知识网

breakpoint settings 断点设置

Charles使用教程-编程知识网

三、反向代理和端口转发区域

reverse proxies 反向代理
正向代理和反向代理的区别:

正向代理:是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;在客户这一端的,替客户收发请求(类似现在正常使用的charles的功能)

反向代理:是代理服务器,为服务器收发请求,使真实服务器对客户端不可见;在服务器这端的,替服务器收发请求,应用场景常见是就是请求分发到多台服务器的负载均衡应用。

一句话就是:

正向代理:代理端代理的是客户端。

反向代理:代理端代理的是服务端。

反向代理的设置

本地端口;

本地主机上的端口创建反向代理。该字段可能会自动填充一个可用的端口。如果有另一个应用程序使用该端口,则在反向代理启动时将收到一条警告消息。

远程主机和端口

作为反向代理的目的地的远程主机的主机名或IP地址和端口。远程端口默认为80,这是HTTP的默认端口。

Charles使用教程-编程知识网

重写重定向

重定向远程服务器的响应将被重写以与反向代理源地址相匹配。默认为开。
远程服务器的重定向响应是完全限定的URL,即使它们在同一网站内。

如果重定向到远程服务器地址,则需要将其重写为反向代理本地地址,否则客户端将使用重定向URL到远程主机,因此不再通过反向代理连接。

保留主机头

Host HTTP标头从传入请求不变地传递,而不是正常重写主机头以匹配反向代理远程主机。默认为关闭。

仅当您具有特定要求时,才需要保留主机头;普通使用的时候没有必要使用的。

监听特定地址

如果要指定本地地址以侦听反向代理,则可以启用此选项并在此处输入IP地址。如果要在同一台机器上运行多个网络服务,但在同一台机器上的不同IP地址上运行,则此功能非常有用。

禁用此选项时,反向代理将绑定到所有可用的本地地址。

port forwarding 端口转发
端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。

Charles使用教程-编程知识网

端口转发使您能够将本地TCP或UDP端口透明地转发到远程主机和端口。 所有在端口的请求和回复可能会记录在查尔斯。

端口转发流量记录在Charles中作为 socket//hostport/URL

如果您有要使用Charles监控的非HTTP应用程序,则端口转发非常有用。

将端口创建到原始目标服务器,然后将客户端应用程序连接到本地端口;

端口转发对客户端应用程序是透明的,并使您能够查看Charles先前可能无法使用的流量

四、charles的代理身份配置区域

windows proxy Windows代理(开启整个系统通过charles作为代理)
五、常用的高级设置区

proxy setting 代理设置
设置的主界面如下:

Charles使用教程-编程知识网

动态端口

启用动态端口选项来监听动态端口,每次查询启动时选择。这样可以避免与计算机上可能运行的其他网络服务的冲突,包括Charles的其他实例(如果是共享计算机)如果你开的端口很多,搞到你自己都记不清楚了,那么推荐你用这个;但是我都是写好一个端口的,比如代理写8888,别的就不会监听这个端口了,而且为了手机方便连接,都是使用指定好的端口。

注意;如果你charles设置了8888的端口,别的服务就不能再使用这个端口号了,否则冲突会发生意外的错误;

透明的HTTP代理

透明代理使Charles能够支持不支持HTTP代理服务器的客户端,或者不知道他们正在使用HTTP代理服务器,例如TCP / IP连接由路由器或防火墙重定向到Charles。这里可以被手机连接;

手机连接的时候,http代理那里写=选手动,并填写此时charles的本机地址和上面设置的8888端口即可;

options 里 主要是设置 绕过代理

Charles使用教程-编程知识网

这里可以设置您的浏览器/操作系统遇到哪些域名的时候,使用默认而不用Charles;配置的列表使用空格或逗号分隔,并在Charles配置其代理设置时注入浏览器。

ssl proxy setting ssl代理设置
最常用的设置就是第一个ssl proxying,这里记录了需要捕获哪些ssl的信息;

注意,如果你不在这里设置,虽然你安装了ssl的charles证书,你依然无法正常捕获;

Charles使用教程-编程知识网

通过SSL代理,您的浏览器或应用程序将收到由Charles签名的证书,而不是来自远程Web服务器的原始证书。这将在您的浏览器或应用程序中触发警告,某些应用程序实际上可能会拒绝该连接。
您可以将浏览器或应用程序配置为接受Charles的证书;为在这里设置了通配符,表示为要捕获记录所有ssl协议的请求和响应。

access control setting 访问控制设置

Charles使用教程-编程知识网

这个访问控制确定谁可以使用这个charles,

本机是永远都可以访问的,默认的访问控制列表如果是空的;

意味着除了这台电脑以外,没有任何设备可以使用charles。

如果你把下面的提示开始,未经授权的设备连接时候会提示你是否允许;

类似下面这种提示框

Charles使用教程-编程知识网

当你手机访问的时候,电脑会提示的;

这里设置后的host,连接时候是无需确认的;

extornal proxy setting 外部代理设置

Charles使用教程-编程知识网

有时候您可能需要使用网络上的代理服务器才能访问Internet。

在这种情况下,您需要为Charles配置外部代理。

您可以为每种代理类型配置身份验证信息。

Charles支持基本身份验证和NTLM身份验证。对于NTLM身份验证,您可以输入“域名”选项。

如果您没有配置身份验证和外部代理请求认证,Charles会将验证请求传递给浏览器,

就像Charles本身正在请求身份验证一样。

排除列表

您可以输入绕过外部代理的loacation列表。

该列表是空格分隔的,每个location都是一个主机或ip地址与可选端口匹配(例如hostname:port),并且支持通配符。
请注意:之前的Charles自动在排除location列表中进行了前缀匹配。

web interface setting Web界面设置
Web界面可以让您使用Web浏览器控制查询,您可以访问 http://control.charles

的Web界面,当查询运行时,您可以启用此功能并配置下面的访问控制

Charles使用教程-编程知识网

首先你必须要开启web inter face,

Charles使用教程-编程知识网

否则你访问

http://control.charles

的时候就提示你没有开启;如下的提示

Charles使用教程-编程知识网

七、Charles工具菜单(Tools)
charles 工具菜单总结

主要是下面的功能,具体可以点击对应菜单查看

禁用缓存
No caching Settings/无缓存工具的用法

Charles使用教程-编程知识网

通过修改请求和响应头来防止缓存;

无缓存工具

无缓存工具阻止客户端应用程序(如Web浏览器)缓存任何资源。因此,请求总是发送到远程站点,并且您始终看到最新版本。

适用范围

该工具可以作用于每个请求(选中 Enable No Caching 即可),也可以仅对你配置的HOST启用(启用的nocaching同时,请选中 only for selected locations);

当用于”only for selected locations”时,可以将no caching的效果限制在你所配置的主机上;

当然location配置也非常灵活;

我比较喜欢用全部禁止,选中 Enable No Caching,并且下面的only选项不要选,就可以了;

不过这样做也有一个不好的地方,就是你访问的时候,同样的资源,在视图中,每调用一次,就会出现一次;

关于WEB缓存

WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户访问延迟增大,WWW服务质量日益显现出来。缓存技术被认为是减轻服务器负载、降低网络拥塞、增强WWW可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(Temproral Locality)原理,将客户访问过的内容在Cache中存放一个副本,当该内容下次被访问时,不必连接到驻留网站,而是由Cache中保留的副本提供。

Web内容可以缓存在客户端、代理服务器以及服务器端。
研究表明,缓存技术可以显著地提高WWW性能,它可以带来以下好处:

(1)减少网络流量,从而减轻拥塞。
(2)降低客户访问延迟,其主要原因有:①缓存在代理服务器中的内容,客户可以直接从代理获取而不是从远程服务器获取,从而减小了传输延迟②没有被缓存的内容由于网络拥塞及服务器负载的减轻而可以较快地被客户获取。
(3)由于客户的部分请求内容可以从代理处获取,从而减轻了远程服务器负载。
(4)如果由于远程服务器故障或者网络故障造成远程服务器无法响应客户的请求,客户可以从代理中获取缓存的内容副本,使得WWW服务的鲁棒性得到了加强。
Web缓存系统也会带来以下问题:

(1)客户通过代理获取的可能是过时的内容。
(2)如果发生缓存失效,客户的访问延迟由于额外的代理处理开销而增加。因此在设计Web缓存系统时,应力求做到Cache命中率最大化和失效代价最小化。
(3)代理可能成为瓶颈。因此应为一个代理设定一个服务客户数量上限及一个服务效率下限,使得一个代理系统的效率至少同客户直接和远程服务器相连的效率一样。
http://baike.baidu.com/item/%E7%BC%93%E5%AD%98

No caching的运行原理

无缓存工具通过操纵控制缓存响应的HTTP头来防止缓存;

从请求中删除If-Modified-Since和If-None-Match头,添加Pragma:no-cache和Cache-control:no-cache。

从响应中删除Expires,Last-Modified和ETag标头,添加Expires:0和Cache-Control: no-cache。

因为客户端的所有请求和服务端响应都经过charles进行处理,所以charles可以很容易的做到这些

禁用Cookies

Charles使用教程-编程知识网

禁用Cookie工具

禁用Cookie工具阻止发送和接收Cookie。 它可以用来测试网站,就像您的浏览器中禁用Cookie一样。

请注意,网络蜘蛛(如Google)通常不支持Cookie,因此该工具也可用于模拟蜘蛛网站的视图。

适用范围

该工具可以针对每个请求启用,也可以仅对选定的位置启用。选中 enable block cookies 即可

当用于某个域名时,可以将禁用Cookies的效果限制在你所配置的主机上;同时选中 only for selected locations 即可;

原理

Cookie头部从请求中删除,防止将cookie值从客户端应用程序(例如Web浏览器)发送到远程服务器。

Set-Cookie头将从响应中移除,从而防止客户端应用程序从远程服务器接收cookie的请求。

注意

很多网站的登录是通过写入Cookies然后通过读取Cookies的值来进行网站用户身份和权限管理的;如果你禁用了Cookies,这将会到导致你登录某个网站的一直,一直停留到登录页,这是因为写入您Cookies的方法没有值导致的;表现就是你一直登录,虽然账号密码正确但一直还是停留在登录页;也就是说如果你不是特意的测试cookie禁用的情况下,没有必要使用这个工具;

选中 only for selected locations 的设置

设置单个匹配可以查看 [charles location的匹配方式.md],设置的方式都是一样的;

远程映射到URL地址
远程映射/Map Remote Settings

功能:把你要请求的地址,映射到一个远程地址;相当于把你的请求地址修改了;

远程映射工具

远程映射工具根据配置的映射更改请求位置,

Charles使用教程-编程知识网

以便从新位置“可见的”地提供响应,就像原始请求一样。
此映射使您能够从B站点提供A站点的全部或部分(A是原始的目标,B是你远程映射的地方)。

使用建议

如果您想开发某个网站,并且已经有了开发环境的网站,并希望把刚更新的某些文件应用到线上网站,测试下效果如何,则“远程映射”将非常有用。

想达到同样的效果也可以通过修改本地HOST的方式来实现;当然如果你通过修改host的方式,可能也非常容易,不过这可能需要借助一个host管理神器 switchhosts

虽然不推荐远程映射,但是非常推荐用”本地映射”

locations匹配

每个位置匹配可能包含协议,主机,端口和路径模式,以匹配特定的URL。位置可能包括通配符。

映射到本地
本地映射/Map Local Settings

功能:把需要请求网络的文件映射为请求本地文件

Charles使用教程-编程知识网

本地映射工具

本地映射工具使您能够使用本地文件,就好比他是你访问的目标网站一部分一样,流程是,客户端获取资源文件的时候,可以向服务器正常发起资源请求,但在charles就已经被截断了,并且把当前的资源请求重定向到你设置的备注;

本地映射可以大大加快开发和测试的效率,否则您将不得不将文件上传到网站来测试结果。使用Map Local,您可以在开发环境中安全地测试。

动态文件(如包含服务器端脚本的文件)不会由Map Local执行,因此如果文件中有任何脚本将脚本返回到浏览器(可能不是预期的结果)。

位置匹配

每个位置匹配可能包含协议,主机,端口和路径模式,以匹配特定的URL。位置可能包括通配符。

本地映射

本地映射包含一个位置匹配和本地目录,从该目录尝试提供匹配。
使用相对路径在本地目录中搜索文件。

相对路径是匹配路径部分之后剩下的请求位置的一部分;
本地映射可以区分大小写;

重写工具
重写工具/rewrite Srttings and rewrite rule

功能:在通过charles时修改请求和响应

重写工具

重写工具可以让你在有请求响应的时候,修改请求和响应的rule。

rule(规则):添加或更改标题或替换响应体中的一些文本,编辑相关的数据。

重写集重写集可以单独激活和停用。每个集合包含位​​置和规则的列表。这些位置选择规则将要运行的请求和响应。

重写rule:每个rule描述单个重写操作。rule可能会影响请求URL的标题,正文或部分内容;它可以根据请求或响应来操作;

那么它可以定义搜索和替换或者只是替换样式重写,重写rule编辑对话框中,提供了有关重写rule的更多文档,可以看下。

local匹配 每个local匹配可能包含协议,主机,端口和路径模式,以匹配特定的URL。local可以使用通配符。

Charles使用教程-编程知识网

调试
当重写操作无法正常工作时,重写工具可能难以调试。如果您有麻烦,请尝试添加一个基本的rule,

例如添加一个非常明显标题的rule,以便您可以看到您写的rule是否与请求匹配。

还可以在错误日志中打开调试,以获取从Charles窗口菜单访问的错误日志中打印的一些调试信息。

规则重写 rewrite rule

每个rule描述单个重写操作

Charles使用教程-编程知识网

Type 类型
该类型指定要执行的重写操作的类型。重写规则类型有四种不同类别;

标题规则,

URL规则,

查询参数规则,

响应状态规则和正文规则。

头和查询参数规则分别影响头字段和查询字符串参数;添加,修改或删除标头和参数。

URL和主体规则执行查找和替换URL和主体的不同部分。响应状态规则执行查找和替换响应状态代码和描述,

例如。 200 OK

Where

选择应用重写规则的位置;在请求,响应或两者上。

Match

匹配字段包含请求或响应中要匹配的文本,以决定是否触发此规则。您可以将名称或值留空或同时保留,以匹配任何值。

如果您将名称和值字段都留空,您将匹配所有请求/响应。

可以启用正则表达式支持,为您的匹配提供Perl风格的正则表达式。如果您在正则表达式中包含组,则可以在匹配字段中使用它们。
除非正则表达式启用,否则名称字段是完全匹配字段,在这种情况下,它支持部分匹配。名称字段对于正则表达式和正常匹配都不区分大小写。如果要创建不需要的重写规则类型,则可能会禁用该名称字段。

值字段是部分匹配,除非您打开匹配整数值,在这种情况下,它是完全匹配的。值字段对于正则表达式和标头和查询参数规则的正常匹配都不区分大小写,并且对URL和正文规则区分大小写。

新建/替换

新/替换字段包含在触发此规则时在请求或响应中添加或替换的文本。将名称或值留空,以使它们与匹配的名称或值相同。

如果为匹配启用了正则表达式支持,则可以使用$1,$2等引用匹配组。

名称和值字段的行为取决于匹配。如果存在相应的匹配,则该字段将作为匹配文本的替代,否则如果匹配为空,则字段将替换整个名称或值。

值字段支持替换第一个或替换所有模式。如果名称匹配是正则表达式,则名称字段始终以替换优先模式运行,否则是完全匹配并替换整个名称。

如果要创建不需要的重写规则类型,则可以禁用名称或值字段。

建议

如果不按预期工作,重写规则可能难以调试。经常测试,最好慢慢建立一个rule。

我很少用到这个,一般都是在已经有的请求上再次修改的;然后repeat;

黑名单
Black List Settings

功能:阻止对匹配HOST的请求;可以直接把请求丢掉,也可以直接返回403状态码

Charles使用教程-编程知识网

白名单
白名单工具,允许您阻止除选定位置之外的所有请求。

注意:如果一个请求与“黑名单”和“白名单”同时匹配成功,则会被阻止。

白名单工具

白名单是除了你设置的HOST以外,阻止所有请求。

Charles使用教程-编程知识网

当Charles收到与白名单不匹配的请求时,Charles会阻止该请求。 您可以选择Charles是否会简单地关闭浏览器的连接,或者向浏览器返回错误页面(具有403响应)。

黑名单工具,用于仅屏蔽选定的域名。 如果一个请求与“黑名单”和“白名单”都匹配,则会被阻止。

DNS欺骗
DNS欺骗/DNS Spoofing

功能:通过将您自己的主机名指定给远程地址映射来欺骗DNS查找

Charles使用教程-编程知识网

一般的开发流程中,在上线之前都需要在测试环境中先行进行验证,而此时手机客户端请求的域名是不太容易改变的,可以通过设置dns方式把域名转发到测试机上,具体设置Tools->DNS Spoofing Settings

比如要把所有包含xxxxxx.com的域名转到10.0.0.71的服务器上,其实用修改HOST的方式是可以解决的;
下面是官方文档上的介绍:

DNS Spoofing工具使您能够通过将您自己的主机名指定给远程地址映射来欺骗DNS查找。 当请求通过Charles时,您的DNS映射将优先。

在DNS更改之前,DNS Spoofing可用于测试虚拟托管网站,因为您的浏览器将会像DNS更改一样运行。

DNS更改通常需要长达24小时才能生效,并且没有DNS欺骗,DNS变更生效后,网站将会变得非常困难。

您可以将主机名映射到IP地址或另一个主机名,这些名称将由Charles在DNS中查找以查找其IP地址。

主机名可能包含通配符。

镜像工具
镜像工具会在你浏览指定网站时,把抓取到的文件克隆一份,并保存在你指定的路径下;

注意:如果你配置是www.aaa.com; 那么只会抓这个域名下的文件,这个域名如果引用了123.abc.com的外部资源(如前端CSS,JS等),引用的外部资源并不会被保存;

charles一般用于捕获确定的资源;如果你想把别人的整站clone下来,推荐用httrack这个工具,charles在clone网站上做的并不好,可以说是非常垃圾的战五渣。

但储存目标的少量文件还是没问题的;

Charles使用教程-编程知识网

保存文件的路径会与你浏览网站的目录结构相同,并且charles会为主机名创建一个根目录。文件名从URL导出并转换为适合的数据进行保存。

实际中的应用:你可以把访问的数据缓存下来,让app在没有server的时候,通过map Local 映射到你抓取到的文件,这样app也能继续跑;

你也可以用镜像工具保存网站内容后,通过map Local 映射到你抓取到的文件;通过修改文件,达到本地的线上调试的功能(你调试的内容因为用的资源都是本机的,所以并不会真正的影响到线上文件的);

查询字符串包含在文件名中。

如果收到相同URL的两个响应,则后面一个文件会覆盖前面的同名文件,因此您保存是镜像中的最新数据。
镜像工具在数据通过Charles时就开始储存了,因此不受模拟慢速设置的限制影响(慢网速只是对你本地的前端看到效果有影响,但是真正速度还是实际速度)。

所选HOST

该工具可以针对每个请求启用,也可以仅对选定的host启用。
当然,如果你设置host的时候,所写的资源,路径等都可以用模式匹配。星号”*”和”?”都是可以用的;

替代方法(右键save)

在使用“镜像”工具之后,您也可以右键单击charles目录中的一个节点(文件/文件夹),在捕获记录后将所有抓取结果保存本地,这会配置镜像更具更加简单,而且避免一些垃圾文件。

唯一的区别就是镜像工具不受录制设置中设置的录制限制,而后来的保存响应是有限的,可能在模拟慢速的时候存在丢失数据的情况。

可能会遇到的坑

如果镜像工具启用了,它将导致任何压缩或编码的响应被解码。

因此,如果服务器提供了一份压缩后的响应,那么在被传递给客户端之前,它将被Charles解压缩(charles相当于是客户端和服务端之间的一个过滤器,任何请求和响应都会经过charles);
即时返回了一份解压缩后的文件,一般也不会有任何影响的;
但如果您已经构建了自己的客户端,或者你本身就是想要那种压缩的响应,那么此时你是得不到的;

自动存储
自动保存工具 auto_save

“自动保存”工具会在你设定的间隔后,自动保存并清除抓取到的内容。假设你设置了3分钟,则每隔三分钟会保存一次,

并且保存后会把charles当前的会话清除掉;(这样可以保证后三分钟保存的不会把之前保存的重复计算在内)

Charles使用教程-编程知识网

如果您离开Charles监视长时间的网络活动,并希望将记录分解为可管理单元,或者避免由于大量数据可能发生的内存不足情况,这很有用。

输入保存间隔(分钟)和保存会话文件的目录。您可以选择是否在每次运行Charles时启动“自动保存”工具,否则,Charles启动时,“自动保存”工具将始终被禁用。

您可以选择以超过小时的保存间隔分钟的倍数启动保存间隔定时器。您的第一个保存间隔将缩短以将间隔对齐到多个。例如,如果您的保存间隔为15分钟,并在10:10启动该工具,则第一个保存间隔将为10:15,以对齐15分钟的倍数,然后每15分钟一次。

会话文件以其名称格式yyyyMMddHHmm(即年月日小时分钟)保存,以便按字母顺序排列时按正确的顺序显示,比如charles201705180927

客户端进程
客户端进程工具/client_process

显示使每个请求的本地客户端进程;

Charles使用教程-编程知识网

客户端进程工具显示负责进行每个请求的本地客户端进程的名称。

客户端进程通常是您的Web浏览器,例如firefox.exe,但客户端进程工具可以帮助您发现许多可能未知的HTTP客户端。

客户端进程名称显示在每个请求的“备注”区域中。

如果您可以在Charles中看到您不确定起始过程的请求,则客户端进程工具很有用。 它仅适用于在运行Charles的计算机上发出的请求。

该工具将在Charles接受每个连接之前引入一个短暂的延迟。 延迟通常不明显或显着。

指定域名

该工具可以针对每个请求启用,也可以仅对选定的位置启用。 当用于所选位置时,可以将工具的效果限制在指定的主机和使用简单而强大的模式匹配的路径上。

修改请求compose
撰写工具/compose和Compose New

compose 是在原有的请求基础上,修改;

Charles使用教程-编程知识网

可以写各种状态;
– URL:
– Method:
– GET
– POST
– PUT
– DELETE
– HEAD
– TRACE
– Content type:
– application/x-www-form-urlencoded
– multipart/form-data; boundary=********
– text/plain
– text/xml
– text/json
– text/javascript
– Protocol version:
– HTTP/1.0
– HTTP/1.1
– HTTP/2.0

这个发送后,该编辑还继续存在,你可以再次修改的;

书写的时候,域名上会出现一个书写笔的标记,代表这个文件是可以书写的;

其实在文件上右键更方便,

新的修改请求
compose New 是新出一个弹窗,自己手动一个个的去写

Charles使用教程-编程知识网

其他的跟compose差不多

批量重复请求
重复发包工具/repeat

Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用;

Charles将请求重新发送到服务器,并将响应显示为新请求。

如果您进行后端更改并希望测试它们,用了charles后,你就没必要在浏览器(或其他客户端)中重复该请求,charles可以非常方便的完成。

特别是如果重新创建请求需要传一些列参数的时候(比如在游戏中获得分数,比如填写一大串表单的请求时候),这将节省大量的精力。

请求的重复在Charles内部完成,因此您无法在浏览器或其他客户端中查看响应;

响应只有在Charles才能看到。

高级批量重复请求
高级重复发包/Repeat Advanced

Charles使用教程-编程知识网

Advanced Repeat就是重复发包多次,这个功能用来测试短信轰炸漏洞很方便。

或者测试后端的性能;

这个在文件的右键菜单上也是有的,在那里操作会更方便和明确;

验证工具
验证工具/validate

验证工具
Charles可以通过发送到W3C HTML验证器,W3C CSS验证器和W3C Feed验证器来验证记录的响应。

验证报告在Charles中显示,并显示出与响应源中相应行的警告或错误(双击错误消息中的行号可以切换到源视图)。

因为Charles测试它记录的响应,它可以测试不容易测试的场景,例如在提交表单后显示错误消息。

重新验证

验证后,您可以从验证结果中选择响应并重复,重复原始请求,然后重新验证结果。

您可以修复任何验证问题,并重新验证页面,而无需返回浏览器。
– -/这个目前还不会用;

发布Glist
Publish Gist /发布代码段

选中某个文件,点击Publish Gist,如果你没有github,这个文件将被匿名发布,您也就无法删除它;

当然你可以在 publish gist setting中,进行发布设置,可以使用您的github帐户来保护发布;代码会被发布到 https://gist.github.com/

导入/导出设置
界面
Glist发布设置
charles Glist发布设置

在这里可以设置Github账户,

发布list的大小限制;等等

Charles使用教程-编程知识网

八、Charles帮助菜单
charles的window和help的菜单介绍

其中window菜单中Active connections;可以用它来看charles进行了哪些访问/charles是否还在工作

help菜单中:

Local IP Address :本地的IP地址查看

SSL Proxying :SSL代理辅助,Charles Root Certificate Help 安装根证书

Install Charles Root Certificate on a mobile device or Remote Browser

Charles使用教程-编程知识网