Charles过滤规则设置后没生效,该怎么排查?

诸葛佳鑫 阅读 86

在用Charles过滤某个域名的API请求时,按照文档设置了Include规则,但调试时相关请求还是显示不出来,这是怎么回事?

我尝试在Filter -> Recording Filters里写了这样的规则:INCLUDE /api/v2/.*,然后重启了Charles和请求,但访问接口时请求列表还是空的。之前能正常抓包,现在连自己的网络请求都看不到,难道规则写反了吗?

还试过把规则改成EXCLUDE none,但没变化。有没有可能漏掉了SSL代理配置?或者规则匹配路径需要加域名前缀?

我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
Mr.冠英
Mr.冠英 Lv1
你这个规则写法本身没问题,/api/v2/.* 是能匹配路径的,但问题大概率出在两个地方:一是没开启对应域名的代理,二是过滤规则没应用到正确的域名上。

Charles 的过滤规则是按域名生效的,你得先确认当前抓包的域名是不是你设规则时对应的域名。比如你抓的是 https://api.example.com/api/v2/user,那在 Recording Filters 里设置的规则必须明确指定这个域名,不能只写路径。

具体排查步骤:
先关掉所有过滤规则,看能不能抓到请求,如果能,说明是规则问题;
再进 Filter → Recording Filters,点 Add,域名填 api.example.com(别漏了协议前缀或端口,比如 8080),类型选 Include,路径填 /api/v2/.*
注意路径要带斜杠开头,正则别写错;
最后检查 SSL Proxying 设置,如果是 HTTPS 请求,得在 SSL Proxying 里加对应域名(默认只加了 * 的话没问题,但如果你改过配置,可能被删了)。

还有个小坑:Charles 在某些版本里,规则设置后要手动点 Apply 或重载,有时候改完不生效,其实是没点 Apply。
另外别开全局拦截规则(比如黑名单里的规则),优先级比 Include 高,会把你 Include 的挡掉。

性能上讲,规则本身没负担,但如果你开了太多 Filter,或者用了复杂正则,可能拖慢一点,不过你这情况应该不是性能问题,就是配置没对上。
点赞 5
2026-02-23 21:11
Dev · 诗琪
排查这个问题的话,可以按照以下步骤来:

1. **检查规则写法**:你的正则表达式/api/v2/.*看起来没啥问题,但Charles的过滤规则匹配的是整个URL,不是单纯的路径部分。所以你可能需要加上域名前缀,比如https?://yourdomain.com/api/v2/.*。记得转义特殊字符。

2. **确保SSL代理配置正确**:如果你抓的是HTTPS请求,肯定要确保SSL代理已经设置好,并且目标域名已经在SSL Locations里添加了。如果没配SSL,即使规则对了也看不到请求。

3. **重启和刷新不够**:有时候光重启Charles不行,建议清空一下Filter的缓存(在Recording Settings里有个Clear按钮),然后重新加载页面或者重新发起请求。

4. **测试EXCLUDE规则**:你之前试过EXCLUDE none,这个确实没啥用。可以试试把Include规则清空,只保留一个非常宽泛的规则,比如.*,看看能不能抓到所有请求。如果能抓到,那说明是你的正则有问题。

5. **查日志和错误提示**:Charles底部的状态栏会有日志输出,留意有没有报错信息。如果有异常,可能会提示你哪里出了问题。

最后再提醒一下,别忘了检查设备是否真的通过Charles代理上网了,尤其是手机端调试的时候容易漏掉这一步。如果还是不行,可以把过滤规则暂时关掉,确认是不是其他地方出了幺蛾子。
点赞 20
2026-01-29 20:23