Charles使用
HTTP调试工具:通过将Charles设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现网络封包的截取和分析。
- 需要安装同样位数的java,所有浏览器都可以使用Charles来截取请求,前提是必须关闭防火墙和关闭浏览器代理插件(或设置使用系统代理)。
- 移动设备设置HTTP代理之后就能以代理环境并经过电脑hosts访问网络(HTTP代理至WAMPSERVER无法经过电脑hosts)。
- Charles默认端口号:8888。
当你刷新页面时,只会在当前session中捕获请求。当关闭session后会导致已经在此session捕获的网站无法在其他session捕获,需要重新启动Charles或新建session。
针对一个域名或网址,右键选择Focus或Ignore可以专门查看或忽略请求。
Ctrl/commad + f调出。
设置是否成为系统代理,取消勾选Window Proxy或macOS Proxy后不再抓取本机请求(仅抓取8888端口号内容)。
移动设备的调试,我们需要把HTTP代理到Charles上:
-
使移动设备和本机在一个局域网内(不需要同一个IP段、也不需要是电脑发射的Wi-Fi,只要是同一个路由器下即可);
若无法抓取信息,则可以重启Charles、重新设置HTTP代理或查看Access Control Settings是否允许访问。有可能某些路由器设置成无法捕获,就需要使用自备发射的Wi-Fi。
-
移动设备的Wi-Fi设置:服务器IP设置成电脑IP,端口号设置成8888;
-
Charles设置允许接收的IP地址的范围(有新的不在允许范围内的IP地址请求时,会自动询问是否允许接收):
进入设置Proxy - Access Control Settings,若接收的IP范围是192.168.1.xxx的话,则添加并设置成
192.168.1.0/24
;若全部范围都接收的话,则直接设置成0.0.0.0/0
。
Charles支持HTTPS和HTTP,不支持socket协议。
-
设置路由
-
Map来源:
路径/*
表示:路径下所有内容、子路径下所有内容。路径/路由
表示:仅此路径下的一个路由。
-
Map去向:
- 都不要添加
(由来源匹配去向)。*
- 都不要添加
-
-
Map至本地:
-
Map至网址:
选择「Map Remote」
若勾选了
preserve host in header fields
,则发起请求的请求头host
会保持Map来源的值,否则host
是Map去向的值。把一个原html地址Map至新网址后,要注意新网址发起的资源请求也会是以原html域名发起,因此需要再配置原html域名下的
/*
Map至新网址(建议直接从源头就修改请求地址,这样就不用配置很多Map至网址)。
Charles能够截断发送请求前(篡改Request)和响应后(篡改Response),修改request和response的所有信息。
场景:发送HTTP请求,我们需要测试接口的各种边界情况(如:出错、超时等表现),Charles的断点+随意篡改,非常方便测试,右键选择「BreakPoints」,开启断点:
小技巧:断点配合repeat功能:
断点列表查看:
repeat功能不需要刷新页面,只需要repeat请求,还可以进行压力测试。
repeat重复发送一次请求;repeat Advances可以自定义重复次数和重复间隔(压测利器)。
若未安装Charles根证书,则仅能捕获加密后的HTTPS请求。
-
安装、信任证书:
-
电脑安装证书
-
移动设备安装证书
移动设备设置好HTTP代码后,访问chls.pro/ssl下载证书并信任。
-
Android系统在设置中搜索「证书」关键字;部分手机若下载安装失败或不信任已安装的证书,可以用连线导入手机方式安装(.cer文件);Android 7.0版本以后,系统不再默认信任安装的CA证书(需要Android代码设置),因此选择能够信任证书的APP进行抓包 或 网上搜索安卓系统信任CA证书的方案(手机root、用Android小于7的系统、CA证书处理成系统证书来安装、等)。
-
iOS
- 在
VPN与设备管理
可以查询、删除证书。 - 在
证书信任设置
可以开关信任的证书。
- 在
-
-
-
设置需要针对的域名:
设置Proxy -> SSL Proxying Settings,把需要抓包的
host+端口号443
添加进去。
捕获的请求太多,容易产生干扰,Charles可以对捕获记录进行过滤。
然后配置「exclude」:
Charles有个有趣的web界面:
强大的是可以控制是否远程可以访问这个界面,还可以设置用户名和密码。 浏览器输入http://control.charles/
tips:若charles是非正常状态下关闭的话,则有些浏览器的代理就不会被自动取消,会出现无法访问网络情况。重新打开Charles再正常关闭可以解决。