目录
背景
理论
Breakpoint功能
Map功能
实践
原理
背景
测试过程中,遇到接口透传数据,修改请求中的值可以使用Postman来进行,当业务场景遇到修改响应里的值的时候,就需要借助Charles来进行。
以下将会阐述具体的步骤。
理论
有两种方式:
下面给大家介绍一下使用charles来修改服务器返回报文的两种方法:
1、 Map功能,适合长期的将某一请求重定向到另一个网络地址或者本地文件
2、 Breakpoints功能,适合做一些临时性的修改。
Breakpoint功能
Breakpoint功能可以截断修改客户端的request、response请求,如在charles返回response请求时,我们可以修改response,从而修改返回给客户端的内容。
1、 客户端先访问相应的页面,可以看到charles抓取了一大堆数据,Filter下过滤我们需要的请求
2、 在上面的请求中选择右键,勾选Breakpoints。后面再次访问此请求时,charles会分别在这个请求的request、response停留,除非我们excute继续。
设置Breakpoint,也可以通过点击Proxy—>Breakpoint Settings来设置。
点击add选择request或者response,或者同时选择。
3、 再次访问互动页面,可以修改request请求,点击Execute
修改response,点击Edit Response,根据需求修改为相应的返回值。点击Execute
Map功能
Charles的map功能分为Map Remote 和Map Local,下面简单介绍一下:
在 Charles 的菜单中,选择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。
或者直接选中请求,右键,也可进入到相应功能的设置页面。
对于 Map Remote 功能,我们需要分别填写网络重定向的源地址和目的地址,对于不需要限制的条件,可以留空。
对于 Map Local 功能,我们需要填写的重定向的源地址和本地的目标文件。首先将网络请求结果保存,使用 Charles 提供的 “Save Response…” 功能将请求结果保存到本地(如下图所示),然后根据测试需要,修改我们想要返回的数据,成为我们的目标映射文件。
实践
首先,明确本次的目标,接口响应的showMessage字段是true,修改showMessage字段为false。
第一步:获取到接口,在你要修改的接口,右键选择 Breakpoints 选项,勾选了旁边会打勾。
第二步:选择 Proxy - Breakpoint Settings 选项。
第三步:选择 add 选项,去进行添加,填写需要修改接口的详细配置信息,点击保存。
第四步:重新去请求需要修改的接口,使用 charles,这时候你会发现你的 charles 界面会发生小的变化,然后这里我就将写死的 true 改成了 false,如下图 :
修改请求也是同样的道理。
修改完成后一定要点击 Execute,去应用到。
第五步:去选择保存你修改 response 信息,会浏览到你电脑的本地,保存一个文件。
第六步:然后去配置 Map Local 参数,选择 tools - Map Local 然后在点击 add 添加文件,选择你第五步保留的文件。设置完成进行保存。
第七步: 再次去发送请求,然后这边可以看到已经修改成功了
原理
进行完实际的操作, 就要究其原理。
1、客户端向服务器发起HTTPS请求
2、Charles拦截客户端的请求,伪装成客户端向服务器进行请求
3、服务器向“客户端”(实际上是Charles)返回服务器的CA证书
4、Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。
5、客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
6、Charles拦截客户端的响应,用自己的私钥解密对称密钥(Charles拿到了对称密钥),然后用服务器证书公钥加密,发送给服务器。
7、服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
8、Charles拦截服务器的响应,替换成自己的证书后发送给客户端
9、至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
简单来说,就是Charles作为“中间人代理”,拿到了 服务器证书公钥 和 HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。这样看来,HTTPS还是很安全的协议。
以上为记录工作实际遇到的场景,共勉~~