正文
分享一个很常见但很折磨人的场景。
我们把 API 调试工具部署在了公司内网服务器上,大家浏览器打开就能用,很方便。但问题来了:我正在开发的接口跑在自己电脑的localhost:8080上,服务器上的网页怎么可能访问得到我本机的服务?
浏览器里的页面发往127.0.0.1的请求,指向的是服务器自己,而不是我的笔记本。
常见解法都有代价
- 本地再装一个客户端:那我用在线工具的意义就没了,接口也没法和团队共享;
- 内网穿透(frp、ngrok 等):要额外部署、配置,还要把本地端口暴露出去,安全上经常过不了公司审查;
- 配代理转发:改浏览器代理、写转发规则,繁琐且容易影响其他请求。
我的思路:让浏览器插件在"本机"代发请求
关键在于:浏览器就跑在我自己的电脑上,浏览器插件拥有在本机发请求的能力。
于是我写了一个篡改猴(Tampermonkey / 油猴)脚本,配合工具本身做了一个「自动启用插件」机制:
- 在工具页面安装并启用油猴脚本;
- 开启"自动启用插件";
- 页面正常发起请求,当目标地址是
localhost/127.0.0.1时,页面不再用普通 fetch,而是把请求交给脚本暴露的GM_xmlhttpRequest通道,由浏览器扩展在本机环境发出(该能力可绕过同源限制、直接访问本机服务); - 本地接口的响应再回传给页面渲染。
对使用者来说,体验就是:工具明明在远程服务器上,却能直接调通我本机的接口,全程不用配代理、不用内网穿透。
【图:请求流转示意图 —— 远程页面 ⇄ 油猴脚本(本机) ⇄ localhost 服务】
适用范围与边界
- 该方案针对HTTP请求;
- WebSocket 始终由浏览器直连,不走插件代发;
- 除了"自动启用",也可以在单个接口上手动打开"使用插件"强制代发;
- 本质是利用浏览器扩展的本地能力做桥接,需要使用者自行安装油猴脚本,好在这是一次性操作。
这个能力我已经做进开源项目里
它是我开源的浏览器端 API 平台NBA-API的一个内置特性,叫"自动启用插件",脚本也能在工具的「插件管理」里直接查看和下载。
除了这个,它还支持 HTTP / SSE / WebSocket 全协议调试、定时巡检、组合文档、AI 助手、群聊,并且可以私有化部署。
- 开源地址:https://gitee.com/fusheng_zhang/NBA-API
- 在线试用:http://182.92.210.97/scmp/static/index.html#/request/api
如果你的团队也被"远程工具调本地接口"这件事困扰,这个思路可以参考,欢迎交流、提 Issue。