Charles 拥有 Map 、Rewriter、Breakpoint 3大调试技巧,非常值得客户端开发学习一波。
针对一个有数据的请求,提前把 Response 保存到本地
在charles「Tools -> Map Local」
勾选 Enable Map Local,点击 Add 添加一个规则
填写对应匹配规则,然后指向本地一个文件路径,点击OK。
命中规则后,会在Overview界面里有一条Note记录。
也可以对着某个请求,右键,选择「Map Local…」
这样可以自动填充url规则
——————————————————————————————
勾选Enable Rewriter,点击 Add 添加一个规则
Rewriter 玩法一: 改写Response的某个开关的值
很多时候你只想改某个值,使用 Map Local 太重又很繁琐。而且把不相关的返回都固定下来了。此时就可以使用 Rewriter 修改某一个值。
先添加一个拦截规则
配置Rewriter规则是,针对response的body。把「“is_open_vehicles”:\s*0,」替换为「“is_open_vehicles”: 1,」
!!!注意!!!:因为这里匹配规则有bug,无法匹配空格,所以key-value之间的一个空格使用了「\s*」替代,并且要勾选上Regex
Rewriter如果命中了,会在Overview界面里有一条Note记录。
Rewriter 玩法二: 改写host指向某个域名
经常的场景是,后端开发说「我这代码还没稳定,还不敢发布到测试环境,要不你来连我的本机IP」,此时就可以使用这个功能。
其他的 Rewriter rule type 看字面意思都能理解,怎么使用我们就靠自己发挥想象力了。
——————————————————————————————
如果会用了Map Local,那看Map Remote这界面应该挺好理解。比上面介绍的 Rewriter host 或者 Rewriter url 更强大。
这功能我一开始用的不多,主要想着「本来就是后端没开发好,才用Charles 的 Map Local 指向一个本地的文件,可以提前模拟请求结果,这让我重定向到其他远端有什么用?」
然后我发现了 Easy Mock 这种第三方平台,可以很方便的管理 Mock 数据和 API 文档,创建的 Mock 接口可以同时供多个开发者使用。并且还有一些黑魔法。
比如按照这个网站设定的语法,写成「@pick([‘张三’, ‘李四’, ‘王五’, ‘赵六’])」 这种样式,可以随机返回 张三、李四、王五。还有随机生成字符串、随机生成邮箱等语法功能。
——————————————————————————————
设置断点后,可以随意改写 Request 继续发送,也可以改写 Response 供客户端使用。然后这个功能很强大,但是开发很少用。因为客户端请求普遍都设置了超时时间,手忙脚乱在10秒内改请求内容,这体验简直了。
——————————————————————————————
在网络设置中 或者 在charles「Help -> Local IP Address」查看IP地址
在charles「Proxy -> Proxy Settings」设置端口
比如这里是8888
为了实现可以抓https的请求,还需要在手机安装charles证书。这里以Android手机为例子。
保存Charles证书到本地
把证书上传到手机,如使用命令 adb push /Users/Yao/Downloads/charles-ssl-proxying-certificate.pem /sdcard/Download/
Android手机普遍直接直接点开文件安装会提示「没有找到应用打开该类型文件」
以MIUI为例,可以通过以下路径安装「密码、隐私与安全」->「系统安全」->「加密与凭证」->「从存储设备安装」,找到自己的charles证书点击安装。
在charles「Proxy -> SSL Proxying Settings」设置允许抓取的SSL匹配规则,这里配置了允许抓取所有SSL连接。
以上就配置完Charles基础抓包设置了。