如何配置
- 确保手机(app所在位置)、电脑在同一局域网下.
- 查看电脑本机IP(help/local Ip Addresses)
- 打开charles下proxy/proxy Settings 确保端口8888 勾选Support HTTP/2 跟 Enable transparent HTTP Proxying
- 开启手机wifi手动代理,主机名为电脑IP,端口8888
- 此时charles会弹出弹窗,选择allow。
- 如果想抓https。需要安装证书 help/ssl-proxying/最长的带mobile的那个
- 手机默认浏览器打开 chls.pro/ssl 下载
- 打开手机设置 找到证书,找到刚才下载的文件,点击安装,有的手机要选择VPN和应用。如果是ios记得在设置当中找到证书,打开一下(有的手机即使安装上了也不一定打开)。ios记得下载后在设置,关于手机中 里面有授权一下。
- proxy/SSL Proxying Settings 选中Enable SSL Proxying 点击add ,输入想抓的host跟port 如果是要抓全部的https,host写 * port 443. 点击ok。
- 此时应该就可以抓了。
- 部分手机比如华为可能出现部分https的包是unknown的情况。
调试
Map Remote
让手机跑本地代码。
有这样一个场景:我们想本地调试 ipad上的app(我们开发的)上的其他环境的页面(测试 预发 又 或者线上环境),怎么用charles实现?
- 按照上面的步骤,将app的网络代理到charles上,
- Tools/Map Remote Settins/add
- From填写的是app的源,Protocol:https Host:ffhz.test.xdf.cn Port:443 path:/* (这是匹配对应路径下全部的path)
- 此时的完整版应该是 ffhz.test.xdf.cn:443/*
- 下方Map To就是自己的本地服务了(前提是得开启npm run start)
- protocol: http Host: 本机ip port 3001(根据webpack配置)
- 此时的完整版应该是 http://10.201.57.15:3001。(运行npm run start 看看终端的结果即可。)
- 意思就是说匹配到ffhz的路径,就会代理到本地了。
==但是请记住,这个里的匹配路径不单单是 host 而且还可以是 请求api的路径==
但是为什么 例子中的ffhz.test.xdf.cn/* 匹配的是路径而不是api呢,推测是因为: 先匹配到路径,因为HTML是第一个文件,直接就将运行的html都替换为本地的了,那接下来的接口当然用的是本地打包的js里面写的了
同样的 既然能劫持别的环境跑本地,那么也能劫持本地跑别的环境。
#BreakPoints
通过给接口打断点,修改接口返回值。从而达到调试页面的作用。
- 抓到接口
- 双击,找到breakPoints
- 下一次请求到该接口,打断点,同时新开breakPoints标签页。点击下方Execute,会看到子标签页Edit Response 找到JSON Text 此时就可以编辑接口返回值了。再点击Execute执行即可。