问题前言
之前不是发过一篇文章吗,讲述的是如何让vpn搭配charles达到抓某些外网站点的作用。
最近发现那篇文章的一些设置会造成一些不可描述的影响,导致我最近几天使用charles遇到了非常奇怪的问题。
问题的发现
详细情况是这样的,当我一如既往的打开charles,准备使用他的Map Local来调试目标站时,我发现无论如何都无法替换成功。
我检查了权限问题,拦截规则问题等。
发现断点可以正常断点到,然后Map Local无法成功替换,并且Charles请求信息明显有显示,Map Local拦截到请求,并且将目标文件替换成了我本地路径下的那个文件。但是为什么没生效呢?
问题的分析
在 Charles 中启用了 External Proxy 设置后,可能会导致 Map Local 功能失效的原因如下:
1. **代理顺序问题**:启用 External Proxy 后,Charles 会将请求转发到外部代理服务器,而不是直接拦截请求进行 Map Local 映射。因此,Charles 无法优先应用本地映射规则。
2. **无法直接访问目标地址**:如果请求被转发到外部代理,那么 Charles 可能不会直接读取目标 URL 的内容,而是通过外部代理间接访问。这会绕过 Charles 的本地规则。
3. **SSL 代理的冲突**:如果你启用了外部代理,尤其是 HTTPS 请求,外部代理可能会重新加密请求,导致 Charles 无法解密并应用 Map Local 规则。
解决方案
如果你需要使用 External Proxy,但同时希望保持 Map Local 生效,可以考虑以下方法:
• **Charles 使用规则**:设置 Charles 的规则(Tools > Map Remote),确保该规则能够在使用 External Proxy 的情况下生效。Map Remote 规则允许你将某个请求映射到另一个 URL,而 Map Local 可能因为代理顺序的关系而失效。
• **禁用 External Proxy 进行测试**:如果 Map Local 是必须的,且与代理的设置冲突,可以暂时禁用 External Proxy,并直接在 Charles 中完成测试。
• **调整代理设置顺序**:在 Charles 中查看是否可以调整请求流转的顺序,让 Map Local 优先执行,再进行外部代理转发。这种方法在某些 Charles 版本中有效,但具体设置因版本不同而异。
下次的目标
我是直接关闭了External Proxy来使用Map Local的,这个问题也是更新了最新版的charles后出现的,暂时没有需求需要在外网环境下使用MapLocal,等下次需要用到了再研究一下如果在开启vpn的情况下使用charles的Map Local
结尾语
在js加密解密的过程中,无可避免的使用很多类似的工具,一定要有钻研的精神,永不停歇。