Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序链接Charles的代理访问互联网时,Charles能够监控这个程序发送和接收的全部数据。它容许一个开发者查看全部链接互联网的HTTP通讯,这些包括request, response和HTTP headers (包含cookies与caching信息)。ios
Charles主要功能:json
1. 支持SSL代理。能够截取分析SSL的请求。windows
2. 支持流量控制。能够模拟慢速网络以及等待时间(latency)较长的请求。后端
3. 支持AJAX调试。能够自动将json或xml数据格式化,方便查看。浏览器
4. 支持AMF调试。能够将Flash Remoting 或 Flex Remoting信息格式化,方便查看。服务器
5. 支持重发网络请求,方便后端调试。cookie
6. 支持修改网络请求参数。网络
7. 支持网络请求的截获并动态修改。app
8. 检查HTML,CSS和RSS内容是否符合W3C标准。测试
Charles安装:
去Charles的官方网站(http://www.charlesproxy.com)下载最新版的相应操做系统的Charles安装包安装便可。
Charles是收费软件,能够免费试用30天。网上有不少破解版,推荐个好的网站:http://www.sdifen.com/
Charles的功能很强大,咱们这里只介绍几个经常使用的而且很是实用的功能:
1. 将Charles设置成系统代理
2. 截取移动设备上的网络请求包
2.1手动重复请求(Repeat,Advanced Repeat)
2.2手动模拟请求(Compose)
2.3修改网络请求内容(Compose)
3. 过滤网络请求
4. 代理转发
5. 支持https请求抓包(若是配置了仍是抓不到,下面有解决方案)
Charles 主要提供两种查看封包的视图,分别名为 “Structure” 和 “Sequence”。
1. Structure 视图将网络请求按访问的域名分类。
2. Sequence 视图将网络请求按访问的时间排序。
配置和使用:
一. 将Charles设置成系统代理
Charles 是经过将本身设置成代理服务器来完成抓包的,勾选系统代理后,系统本地发出去的请求都能被截取下来。若是只抓取APP的包的话,可关闭此配置,这样不会出现太多的数据看着比较乱。
Mac
Windows:
须要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles 是经过将本身设置成代理服务器来完成封包截取的,因此在默认状况下没法截取 Chrome 和 Firefox 浏览器的网络通信内容。若是你须要截取的话,在 Chrome 中设置成使用系统的代理服务器设置便可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。
二. 截取移动设备上的网络请求包
咱们在调试移动APP时,须要抓取APP发送的数据包,首先进行设置,Proxy -> Proxy Settings默认端口是8888,根据实际状况可修改。
查看本机IP地址:Help -> Local IP Addresses
而后配置手机代理:
IOS和Android配置差很少
打开要调试的APP,请求就会先发送到Charles,而后验证是否容许访问。
当点击容许后,能够在Proxy -> Access Control Settings里看到能够访问此代理服务器列表
注意
若是不当心点击了拒绝,能够手动添加手机IP/Mac地址到容许访问列表,或者重启Charles,手机再次访问,会再次提示选择。
若是不想每换一个手机都要进行验证,能够配置容许全部手机访问,加入
0.0.0.0/0(IPv4)或::/0(IPv6)
如今就能够抓包了,拿一款APP来作测试:
三. 过滤网络请求
一般状况下,网络请求是很是大量的,从几十个请求里找到咱们须要的观察的某个请求比较费时,那么咱们就须要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。有两种方法:
1. 在Sequence界面的中部的Filter栏中填入须要过滤出来的关键字。例如咱们的服务器的地址是:*.leautolink.com,那么只须要在Filter栏中填入leautolink便可。(通常用于临时过滤)
2. 在Charles的菜单栏选择"Proxy"->"Recording Settings",而后选择Include栏,选择添加一个项目,而后填入须要监控的协议,主机地址,端口号。这样就能够只截取目标网站的封包了。以下图所示:(固定过滤地址)
四. 代理转发
实际开发时,有这样的场景,服务端线上版本有bug,你在本地修改程序后,须要模拟实际的线上环境,来验证程序的正确性,最笨的方法就是让客户端修改一下APP的调用地址到你本机,而后从新打一个版本供你模拟测试,这样虽然能够,但每次遇到bug都要这么作的话,那效率极其低下,然而Charles为咱们解决了这个问题。
请求转发,把调用方调用的地址转发到你本机地址的程序进行执行。
而且配置Tools -> Map Romote
运行APP
五. Https请求抓包
默认咱们是看不到https的请求数据的。咱们须要安装证书。
Mac:
双击打开Charles Proxy CA
而后配置Proxy -> SSL Proxying Settings... 添加要抓取的https请求
而后再次请求:
若是再也不使用Charles,想删除手机里的证书文件怎么删除呢?
设置->通用->描述文件与设备管理,删除指定的证书便可
Windows:
下一步
而后继续下一步直到导入成功。
剩下的配置与Max下配置相同。
SSL的问题:
最近iPhone系统更新到ios 10.3后,用Charles抓包居然出现了一些问题,https的请求都会失败,提示错误信息为Failure SSLHandshake: Received fatal alert: unknown_ca 和You may need to configure your browser or application to trust the Charles Root Certificate. 然而以前任何问题都没有,而且相关设置都正确:电脑上安装了Charles的根证书,而且设置了始终信任,而后手机上也登陆了http://chls.pro/ssl安装了描述文件,一切都按正常程序走的,可是错误始终没法解决.
缘由:
虽然charles的根证书已经在安装列表中显示,但它是被关闭的。在iOS 10.3以前,当你将安装一个自定义证书,iOS会默认信任,不须要进一步的设置。而iOS 10.3以后,安装新的自定义证书默认是不受信任的。若是要信任已安装的自定义证书,须要手动打开开关以信任证书。
解决:
设置->通用->关于本机->证书信任设置-> 找到charles proxy custom root certificate而后信任该证书便可.
Windows系统没法上网的问题
在windows下,若是Charles没有正常关闭,或者系统重启后没法上网的问题,由于Charles作了系统代理,当上网的时候,首先先访问代理服务器,而后代理再去连接网络,这时候Charles是非正常关闭的,只要从新打开Charles便可上网正常,正常关闭Charles后一样没问题。
## 其余高级功能 ##
1、断点调试
二、对要打断点的接口右键,选择【Breakpoints】
简单教程:https://blog.csdn.net/mxw2552261/article/details/78645118
入门到精通:https://blog.devtang.com/2015/11/14/charles-introduction/