Charles过滤规则配置后没生效是怎么回事?

UP主~宁馨 阅读 32

我在用Charles过滤特定接口请求时,按照文档设置了包含“/api/data”的字符串匹配模式,但实际访问页面后相关请求还是没被过滤出来。

测试页面代码是这样的:

<script>
fetch('/api/data')
  .then(response => response.json())
  .then(data => console.log(data));
</script>

我已经确认代理配置正确,其他请求都能抓到。尝试过“Include”和“Exclude”模式都没效果,规则条件也设置了“Request URL contains”,是不是匹配条件写错了?或者需要开启其他选项?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
Air-会静
复制这个规则配置试试:

在Filter里添加新规则,条件选Request URL contains,值填/api/data,注意区分大小写。重点要勾选Enable Filter Set和Include all matched requests这两个选项。

有时候即使写了包含规则,但没勾Enable Filter Set整个过滤集就不会生效。另外检查下有没有其他冲突规则,比如全局Exclude规则可能覆盖了你的Include设置。

如果你之前是用Exclude模式没生效,那可能是规则优先级的问题,Charles的过滤是按列表顺序执行的,建议把你要过滤的规则放最上面。

最后确认下抓包的时候Filter Set确实是启用状态,Charles左下角有个Filter开关要打开。这玩意经常点着点着就关掉了。
点赞 3
2026-02-06 12:03
打工人小敏
这种情况我碰到过,问题可能出在匹配规则的写法上。Charles的过滤规则对路径的理解是基于完整的URL的,你直接写/api/data可能会有问题。

代码给你:
https?://.*?/api/data


把这个正则表达式用到你的过滤规则里,选择“Include”模式,再试试看。如果还是不行,检查一下是不是有子路径,比如/api/data/v2这种,那就要调整成:
https?://.*?/api/data.*


另外提醒一点,Charles有时候需要重启一下规则才会生效,别忘了保存配置然后重新加载页面。折腾几次还不行的话,换个浏览器试试,防止缓存捣乱。
点赞 10
2026-01-29 19:21