背景

charles有个非常好用的功能,针对拦截过的请求,可以二次手动发起,对于调试来说非常方便
有个外网的资源,需要翻墙,我既想用charles抓包,也想翻墙,但这样会有冲突,因为socks5隧道转发只能设置一个端口
mac_wifi_proxy
怎么办呢,那就只能通过socks5串联的方式进行代理
浏览器 -> charles -> 本地socks5 -> 加密并请求服务端。。。

charles外部代理配置

抓包的charles端口为8889,翻墙代理的socks5端口为1087
我们把设置charles启用外部代理,端口为1087
charles_external 然后再把本地wifi的socks5端口指定为8889即可(第一张图片)

调试过程

我想复现某一个资源请求,发现该资源被前端的service worker缓存了,那么如何从缓存中单独清除这个资源呢?

debug service worker代码,把该资源从缓存中删除
通过打断点加上设置断点的条件,然后把缓存变为Null,让其继续走下面代码执行fetch代码,就能通过网络从新请求资源
js_debug_service_worker

到了我该使用charles repeat二次请求的功能的时候了,发现直接报错
二次请求直接被拒绝

经尝试repeat或compose二次请求功能,直接阻断,一度以为是服务端的资源出了问题,后来用Post man或者curl 证明不是服务端的问题
那么问题出在哪里呢?之前都好好的。索性一不做二不休,把该资源下载到自己的服务器上,然后抓包请求自己的服务器,这样就不用翻墙
那么去掉charles 的外部代理之后,二次请求就变好了。原来是charles搞的鬼,又一个bug被我发现了。。。。

总结

charles bug,charles启用外部代理时,无法在二次请求(repeat、compose)