为什么选择了 cloudflared,而不是 ngrok

4 阅读3分钟

为什么选择了 cloudflared,而不是 ngrok

结论先行:我选择 cloudflared 不是因为它“更强”,而是因为 ngrok 免费版生成的回调地址太长,无法通过 WPS WebOffice 的回调校验;而要使用短子域名必须付费。

这是一篇真实踩坑后的工程实践总结,不是工具对比评测。


一、背景:WPS WebOffice 的「本地回调」调试场景

在对接 WPS WebOffice SDK(文档保存回调) 时,我遇到一个典型但容易被忽略的问题:

  • WebOffice 的 保存、上传等接口是由 WPS 主动回调我的服务
  • 我的服务运行在 本地(127.0.0.1)
  • WPS 位于公网

👉 这意味着:本地调试 ≠ 不需要网络穿透

只要是「第三方主动调用你」,你就必须让你的接口 公网可达


二、为什么一定要用网络穿透

很多文章会说:

“本地调试阶段不需要 ngrok / cloudflared”

这句话在 WPS 回调场景下是错误的

原因很简单:

  • 你的 Controller 在本地
  • WPS 的服务器不可能访问你的 127.0.0.1

所以你必须满足三个条件:

  1. 公网 HTTPS 地址
  2. 能转发到本地服务
  3. URL 能被 WPS 平台接受

三、最开始我用的是 ngrok(问题从这里开始)

ngrok 是我最早尝试的工具,使用体验也确实很好:

  • 安装简单
  • 一条命令就能跑
  • 稳定性不错

但在 WPS WebOffice 回调配置 这一步,问题暴露了。

1️⃣ ngrok 免费版的致命问题

ngrok 免费版生成的地址通常是:

https://xxxxxx-xxxx-xxxx-xxxx-xxxxxx.ngrok-free.app

这个地址:

  • 非常长
  • 不可控
  • 每次重启都会变

WPS 对回调地址是有长度和格式校验的

结果是:

  • 在控制台配置时直接失败
  • 或者回调时提示「参数无效 / 请求失败」

2️⃣ 那为什么不用 ngrok 的子域名?

因为:

ngrok 的自定义子域名是付费功能

对一个仅用于 本地联调 / SDK 调试 的场景来说,这个成本不合理。


四、转向 cloudflared:不是更强,而是“刚好能用”

后来我换成了 cloudflared 的 quick tunnel(trycloudflare)

启动命令非常简单:

cloudflared tunnel --url http://127.0.0.1:8080

生成的地址类似:

https://matching-insights-known-importance.trycloudflare.com

cloudflared 为什么能通过 WPS?

关键不在于“技术先进”,而在于:

  • URL 长度相对可控
  • 域名结构简单
  • 免费即支持 HTTPS

👉 刚好满足 WPS 的回调校验规则


五、一个容易混淆但必须澄清的点

❌ 参数无效 ≠ 穿透工具问题

在调试过程中,我也遇到过:

  • 404
  • 参数无效
  • 请求失败

但这些问题:

  • 本地 Postman 直调也会出现
  • 与 ngrok / cloudflared 无直接关系

真正的原因通常是:

  • Controller 路径不匹配
  • HTTP Method 不一致(GET / POST)
  • PathVariable / RequestBody 解析错误

👉 穿透工具只负责“能不能打到你”,不负责“你写得对不对”。


六、最终选型总结

我最终选择 cloudflared 的原因只有一个,而且非常现实:

在不付费的前提下,它生成的回调地址能通过 WPS 的校验。

对比总结

项目ngrok 免费版cloudflared quick tunnel
HTTPS
本地穿透
URL 长度❌ 过长✅ 可接受
自定义子域❌ 付费
WPS 回调可用

七、给后来者的建议

  1. 先本地把接口跑通(Postman 直调)
  2. 再解决公网可达问题
  3. 最后再看平台对 URL 的隐性限制

不要一上来就怀疑 SDK,也不要一上来就怀疑网络。


结语

这次踩坑让我意识到一件事:

很多技术选型,并不是“谁更好”,而是“谁在当前约束下活得下来”。

如果你也在做第三方 SDK、本地回调、内网穿透相关的调试,希望这篇文章能帮你少走一点弯路。