← 所有工具
我们的笔记

smee.io 把 UnifyPort webhook 转发到 localhost

UnifyPort 把事件投递到一个公网 HTTPS URL。smee.io 只靠一个 Node 客户端就把它桥接到你的笔记本——不用隧道二进制,也不用注册账号。

smee.io 解决什么

smee.io 是 GitHub 维护的代理:打开一次就给你一个公开的 channel URL。任何 POST 到这个 channel 的请求都会被重新广播给每个连着的客户端。在你机器上跑那个小小的 smee-client,它就把每条请求重放到你本地的 handler——于是来自公网的 webhook 不用装隧道软件就能到达 localhost

五分钟接上 UnifyPort handler

假设你的 handler 监听 3000 端口:

  1. 1. 打开 smee.io,点 Start a new channel,复制 channel URL。
  2. 2. 通过 POST /v1/webhook-endpoints 注册它——把 url 设成这个 channel,迭代期间 subscribed_events["*"]
  3. 3. 跑客户端,把它指向你本地的路由:
  4. 4. 从渠道侧触发一个事件——一条 Telegram 私信、一条 WhatsApp 消息——看它到达 localhost:3000
npx smee-client -u https://smee.io/<channel> -t http://localhost:3000/events

签名校验照样能用

smee 原样转发 raw body,所以你 handler 看到的字节就是 UnifyPort 签名的那一份。校验和生产环境完全一致——重新计算并和 X-Device-Signature 比对:

X-Device-Signature = hex( HMAC-SHA256( secret, timestamp + "." + raw_body ) )

想在写代码前用手先确认一遍,可以在我们的 CyberChef 教程里跑同一套算法,或者用离线的 DevToys

smee.io 不合适的场景

  • 任何接近生产的流量。 channel 是公开且可被猜到的——当作任何人都能读取或注入流量来对待。只用一次性的密钥。
  • 高频或对延迟敏感的测试。 公共中继多了一跳;像 ngrok 这样带 4040 inspector 的本地隧道更稳。
  • 你还要看别的 HTTP 流量。 smee 只中继它自己的 channel;ngrok 或 Pipedream RequestBin 能给你更全的视图。

常见问题

smee.io 会改动请求 body 吗?
不会。它中继的是 raw 字节,所以 X-Device-Signature 校验和生产环境完全一样——重新算 hex(HMAC-SHA256(secret, timestamp + "." + body)) 再比对即可。
我需要装什么吗?
只要 Node——用 npx smee-client 跑客户端就行,不用全局安装,也不用任何隧道二进制。
smee.io 能用于生产 webhook 吗?
不能。channel 公开且可被猜到。它适合本地开发、配一次性的 signing secret;上 staging 或生产请换私有隧道或你真实的 endpoint。

推荐的 UnifyPort 本地开发流程

专门留一个账号给本地开发,smee 客户端常驻在一个终端窗格里,handler 保存即重载。某条投递不对劲时,从渠道侧重新触发,或从 handler 日志里回看——万一签名对不上,用 CyberChef 验一下。