← 所有工具
我们的笔记
用 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. 打开 smee.io,点 Start a new channel,复制 channel URL。
- 2. 通过
POST /v1/webhook-endpoints注册它——把url设成这个 channel,迭代期间subscribed_events用["*"]。 - 3. 跑客户端,把它指向你本地的路由:
- 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 验一下。