当前位置: 首页 > news >正文

说说Charles

本文来源 https://blog.csdn.net/Aaroun/article/details/79109917

 

今天,给大家做一次分享,主要面向移动端测试,介绍了我平时接口开发工作中用到的功能。下面介绍我今天分享的内容:

一、charles简介

二、安装与配置

三、功能

四、Q&A

一、charles简介

1.Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器。

  ps:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。我理解的就是手机设置代理连接charles,此时charles表现为一个反向代理服务器。

2.它允许一个开发者查看所有连接互联网的HTTP通信。

3.Charles是一个简单的基于HTTP协议传输的调试工具,在开发和测试 工作扮演着重要的角色。

二、安装与配置

charles安装:

1.下载地址:官网http://www.charlesproxy.com下载

2.破解:Charles是收费软件,需要破解。破解方法是下载charles.jar替换原来的 jar包。

3.charles.jar下载地址:http://pan.baidu.com/s/1i3Qt24H(我下的charles版本为3.11.2)

ps:jar包对应的charles版本3.11.2 ,可网上搜取最新的

环境配置:

针对移动端测试,测试手机app需要的配置:

1.Charles端口设置
    proxy->proxy Setting,设端口号为8888

 

  

2.IOS&Android代理环境配置     

连接wifi,点开设置http代理, 选择手动;     服务器填写charles所在本机的ip地址,端口号8888

 

   

3.安装SSL根证书,查看/修改https接口

    https是SSL协议加密(基于CA证书)的http请求,通过charles抓包看请求,是由charles代替服务器与app实现SSL握手协议。故要用charles抓app的https包,就要在手机上安装charles的SSL根证书,实现charles对手机app的身份认同。
   安装证书:http://www.charlesproxy.com/ssl.zip,解压后导入移动设备。

   方法参考:工具栏Help—》SSL Proxying—》Install Charles Root Certificate on Mobile Device or...

 

        

       按照提示下载证书:  手机设置代理—》浏览器输入网址—》安装证书

 

 

                                                                                                  
   4.SSL代理设置:Proxy→SSL Proxying Settings→勾取Enable SSL     Proxying→add→添加想要抓取的域名和端口号,以抓取阿波罗app数据为例

        

 

   

三、功能

1.捕获网络请求

 捕获记录控制:过滤网络请求 通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。

"Proxy"->"Recording Settings",然后Include栏选择添加一个项目,填入需要监控的协议,主机地址,端口号,这样就可以只截取目标网站的封包了。如下图截取阿波罗app数据:

 

勾选Proxy →Start Recording,开启抓取记录,可以在charles界面看到你所过滤的网络请求,以阿波罗app为例:

 

 

 

Charles主要提供2种查看封包的视图,分别名为“Structure”和"Sequence"。
Structure视图将网络请求按访问的域名分类。
Sequence视图将网络请求按访问的时间排序。
大家可以根据具体的需要在这两种视图之前来回切换。
对于某一个具体的网络请求,你可以查看其详细的请求内容和响应内容。如果响应内容是JSON格式的,那么Charles可以自动帮你将JSON内容格式化,方便查看。

2.断点

Breakpoint:适合临时性修改数据

通过使用断点功能来篡改请求的数据或者返回的数据,达到模拟的效果,已测试阿波罗app为例方法如下:

我们可以针对接口右键选择"BreakPoints",这样这个接口就被加入到断点状态了

需要进一步修改断点的属性,可以在菜单栏"Proxy"–>"Breakpoints Settings"里进行添加删除或者修改,并且可以选择这个断点是在request还是response,还是两者都要。

 

刷新app界面,跳转到断点模版,这个时候你可以在对应状态情况下修改request或者response,然后点击下方按钮“Execute”。

点开Edit Response界面,选择JSON格式,格式清晰,方便修改,直接在上面进行数据修改,改成你想要测试的数据,然后点击执行按钮。

 

 

再次刷新app界面,然后app返回的是新改的数据,根据返回数据测试客户端显示是否正确。

 

 

3.强大的maping

Map:适合长期将某一些请求重定向到本地文件或另一个网络地址

a.Map Local
    可以将远程的某个文件代理到本地文件,进行调试。使用方法如下:
    Tools→Map Local→勾选Enable Map Local→Add→填入需要映射本地文件的协议,主机地址,端口号

    本地文件可以是自己造的测试数据,也可以是接口返回的数据保存到本地再进行修改,只需先将接口返回数据进行保存到本地:点击某接口response,右击save response。

b.Map Remote:模拟域名劫持
    实现方法:通过map remote将请求的域名map到另一个域名
    Map Remote的功能原理和Map Local的原理相同,都是替换请求,只不过Map Local替换的请求为本地文件,而Map Remote替换的请求为线上请求。
    使用方法:Tools→Map Remote→勾选Enable Map Remote→Add→填入需要替换请求的协议,主机地址,端口号

    如图:splash接口映射到entry接口,splash接口访问的是entry接口的数据。

 

      

4.网速模拟

charles可以模拟不同的网络,比如2G,3G,还可以自定义设置网络速度,用来模拟慢网速。
使用方法如下:
开启网速模拟,主菜单Proxy——Throttle Settings
配置:打开throttle settings页面,可选择内置的一些带宽设置,也可以自定义设置,通过设置上下行的带宽和往返延迟来模拟自己需要的网速。

5.重复发送请求

repeat:
此功能对于测试同学特别有用,可以检验接口的健壮性。 
对于前端的价值是不需要刷新页面,只需要repeat请求,比如检验代理是否成功,修改请求后执行等。
使用方法:
选择请求后,右击Repeat 就是重复发送一次请求。 
Advanced Repeat可以自定义重复次数和重复间隔,重复发送多次请求。

 

   Iteration:迭代次数
                                                                       Concurrency:并发数
---------------------
作者:一亩地
来源:CSDN
原文:https://blog.csdn.net/Aaroun/article/details/79109917
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/gxunique/p/10873752.html

相关文章:

  • 对比MySQL,一文看透HBase的能力及使用场景
  • h3c vlan配置
  • es6 实现单链表
  • maven中spring jar包版本号不统一出现报错
  • 从零开始学Node.js(七_增)
  • python基础知识8——常见内置模块
  • vim跳转到某行
  • Knative Eventing 中如何实现 Registry 事件注册机制
  • jquery.i18n.properties前端国际化方案
  • cursor-spacing 软键盘和input的距离
  • spring cloud服务注册与发现无法发现的可能原因
  • Python中的列表(3)
  • 【Java基础】图片压缩
  • Nginx反向代理,负载均衡,redis session共享,keepalived高可用
  • Python进阶之路 3.5.4 循环中的else语句
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Linux系统编程】快速查找errno错误码信息
  • Android优雅地处理按钮重复点击
  • Angularjs之国际化
  • egg(89)--egg之redis的发布和订阅
  • E-HPC支持多队列管理和自动伸缩
  • flutter的key在widget list的作用以及必要性
  • Javascript基础之Array数组API
  • LeetCode18.四数之和 JavaScript
  • Python语法速览与机器学习开发环境搭建
  • V4L2视频输入框架概述
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 计算机在识别图像时“看到”了什么?
  • 盘点那些不知名却常用的 Git 操作
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 思否第一天
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 写给高年级小学生看的《Bash 指南》
  • 硬币翻转问题,区间操作
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • MyCAT水平分库
  • zabbix3.2监控linux磁盘IO
  • ​TypeScript都不会用,也敢说会前端?
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • %@ page import=%的用法
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十四)Flask之flask-session组件
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (十三)Maven插件解析运行机制
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net快速开发框架源码分享
  • .NET企业级应用架构设计系列之应用服务器
  • .net专家(张羿专栏)
  • /deep/和 >>>以及 ::v-deep 三者的区别