Charles反向代理配置后请求被拦截怎么办?

程序员志鸽 阅读 26

用Charles设置反向代理把localhost:8080映射到第三方接口,但请求还是走的原始地址,Proxy设置已经开启SSL拦截了

按官方教程配置了映射规则:

请求URL: /api/*
反向URL: https://api.example.com

但抓包发现请求直接显示404,Charles的Pass Through标签里能看到原始请求,就是没触发反向代理

已经重置过sessions、重启软件,手机代理配置也没问题,其他简单映射测试能成功,就是复杂接口不行

我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
小奥翔
小奥翔 Lv1
先确认一下几个关键点,可能是这些地方出了问题。第一,检查你的映射规则是否写得准确,特别是 /api/* 这个路径匹配规则,确保它能正确覆盖到你要代理的请求路径。如果路径匹配不严谨,Charles 会直接放过这个请求,不会走反向代理。

第二,SSL 证书的问题很常见。你提到开启了 SSL 拦截,但需要确保目标接口的域名 api.example.com 已经被正确地添加到了 Charles 的 SSL Proxying 设置中。如果没加进去,Charles 无法解密 HTTPS 流量,自然也就没法触发反向代理规则。另外,客户端那边也要信任 Charles 的根证书,否则请求会被直接拒绝。

第三,复杂接口可能涉及额外的 Header 或参数校验,比如 Host 头、Referer、User-Agent 等。有些服务器会对这些字段做严格校验,建议抓包对比一下原始请求和通过 Charles 发出的请求,看看有没有差异。如果有,可以在 Charles 的 Rewrite 功能里手动添加或修改这些 Header。

还有一个容易忽略的地方是缓存问题。如果你之前测试过类似的规则,可能会有缓存干扰,导致新规则没生效。试着清除 Charles 的所有缓存,或者干脆换个端口重新配置。

最后提醒一下安全性问题。用 Charles 做反向代理调试时,尤其是涉及到第三方接口的情况下,一定要注意不要把敏感数据泄露出去。比如说,代理规则配置不当可能会导致请求直接转发到错误的目标地址,甚至暴露内部接口。确保你的 Charles 配置只在可控的环境下使用,并且定期清理日志文件,防止敏感信息留存。

如果以上都确认无误,还是不行的话,可以试试用别的工具比如 Fiddler 做对比测试,有时候换一个工具反而能更快发现问题所在。
点赞 1
2026-02-20 00:09
UX-云霞
UX-云霞 Lv1
遇到这种情况多半是反向代理规则没匹配上导致请求直接透传了。你确认下这几个点:

1. 请求的URL路径是否确实是以 /api/ 开头,而且中间没有额外的路径参数干扰。比如 /api/test 可以匹配,但 /api2/test 就不会生效。

2. 检查你的反向代理设置是否开启了 Enable Rewrite,并且规则里确实写了 Rewrite Location Headers。因为有些接口会返回302跳转,如果没重写Location头,后续请求会直接跑到原始域名。

3. 你可以在Proxy -> Proxy Settings里检查下端口是否正确监听了8080,然后Pass Through里是否把api.example.com加进去了。否则Charles会尝试抓包但不处理,看起来就像没代理一样。

4. 最关键的一点,很多人忽略的是:SSL Proxying Settings里是否添加了目标域名 api.example.com 并且开启了SSL代理。否则即使反向代理配置正确,HTTPS请求也不会被Charles处理。

如果以上都确认没问题,可以尝试加一个更具体的规则,比如把 /api/test/* 映射到 https://api.example.com/test/ 看看是不是路径重写的问题。

代码放这了:
# 示例:确保你的反向代理路径匹配正确
Path: /api/*
Destination: https://api.example.com
Enable Rewrite: YES
Rewrite Location Headers: YES
点赞 5
2026-02-06 20:23