我最近做了一件挺有意思的事。
把一个原本需要在本机运行、依赖微信客户端和系统代理的视频号下载项目,拆出其中的在线解析能力,部署到了 Cloudflare。
现在打开 https://wx.defou.ai,粘贴一个视频号分享链接,就可以直接查询视频信息并下载。

整个过程没有购买服务器,也没有配置 Docker,没有部署 Go 后端,更没有自己维护一台 VPS。
不过,这个过程并不是把整个项目直接丢到 Cloudflare 上。
原项目的主体是桌面下载器,它需要在 macOS 或 Windows 本机上运行,依赖微信客户端、本机证书和系统代理。Cloudflare Workers 不能替代本机微信,也不能替代本机代理。
真正适合部署到 Cloudflare 的,是仓库里已经存在的视频号分享链接在线解析功能。
这也是整个部署过程中最重要的判断。
不要先问一个项目能不能上云,先拆开看,项目里究竟是哪一部分适合上云。

项目里真正适合部署的部分
项目地址:
https://github.com/ltaoo/wx_channels_download下载项目:
git clone https://github.com/ltaoo/wx_channels_download.gitcd wx_channels_download视频号在线解析功能位于:
internal/api/sph/主要文件是 worker.js 和 index.html。
用户在网页中粘贴分享链接,页面向 /api/fetch_video_profile 发送 POST 请求。
Worker 收到请求后做两步工作。
第一步,把分享链接提交给元宝接口,得到视频导出信息。
第二步,根据导出的 Token 和 ID,请求视频号 Feed 信息,拿到真正的视频地址。
最终把结果返回给前端。

为什么没有直接使用原来的 Go 部署命令
原项目已经提供 sph_deploy 命令,可以通过 Go 代码调用 Cloudflare REST API 发布 Worker。
这个方式可以使用,但如果以后要接 GitHub Actions,或者交给别人维护,标准 Wrangler 项目更直观。
因此进入目录后,先安装依赖:
cd internal/api/sphnpm install然后使用:
npx wrangler loginnpx wrangler whoami完成 Cloudflare OAuth 登录。
先 dry-run,再部署
执行:
npm run check它会生成图标模块、检查 worker.js 语法,并执行 Wrangler dry-run。
成功后再执行:
npm run deploy第一次部署会得到一个 workers.dev 地址。先用 curl 检查主页返回 200,再继续配置 Secret。

为什么需要元宝 Cookie
视频号分享链接的解析依赖元宝 Web 端接口,而这个接口需要认证状态。
获取方法是,在元宝页面登录后打开开发者工具,切换到 Network,提交一个视频号分享链接,找到 get_parse_result 请求,然后查看 Request Headers 中的 Cookie。
真正需要的字段只有:
hy_sourcehy_userhy_token不要把完整浏览器 Cookie 写进项目,也不要把 Cookie 放进 wrangler.toml。
正确方式是:
npx wrangler secret put COOKIE写入之后,Worker 可以通过 env.COOKIE 读取。
如果忘记设置,接口会返回:
{ "error": "COOKIE secret is not configured"}这样问题会非常明确,不需要从上游错误里猜原因。

验证视频解析
curl -X POST \ https://wx-channels-download.<你的子域名>.workers.dev/api/fetch_video_profile \ -H 'Content-Type: application/json' \ --data '{"url":"https://weixin.qq.com/sph/你的分享链接"}'返回内容会包含作者信息、视频描述、互动数据、封面地址,以及可播放的视频地址。
本次实际验证返回 HTTP_STATUS=200,说明 Cookie Secret 已生效,分享链接解析成功,视频地址可以返回到前端。
页面改造
原页面有一个原始 JSON 展示模块。它适合开发调试,但不适合普通用户,所以删除了。
页面保留:
• 视频播放器 • 视频封面 • 作者头像和名称 • 视频描述 • 点赞、评论和转发数量 • 普通下载按钮 • 原始视频下载按钮
页脚增加了开源项目入口和 X 入口:
<a href="https://github.com/ltaoo/wx_channels_download"> 开源项目</a><a href="https://x.com/wangdefou"> X · @wangdefou ↗</a>之后根据实际使用体验,顶部品牌文案也被删除,只保留页脚入口。
绑定自定义域名
默认的 workers.dev 域名可以使用,但长期对外提供服务时,自己的域名更合适。
这次使用:
wx.defou.ai在 wrangler.toml 中加入:
routes = [ { pattern = "wx.defou.ai", custom_domain = true }]关键是 custom_domain = true。它会让 Cloudflare 自动处理 Worker Custom Domain、DNS 记录、HTTPS 证书和请求路由。
重新部署:
npm run deploy如果 Wrangler 显示:
wx.defou.ai (custom domain)就说明绑定已经创建。

自定义域名验证
检查主页:
curl -I https://wx.defou.ai/测试解析接口:
curl -X POST \ https://wx.defou.ai/api/fetch_video_profile \ -H 'Content-Type: application/json' \ --data '{"url":"https://weixin.qq.com/sph/你的分享链接"}'最终验证结果:
主页,HTTP 200视频解析接口,HTTP 200HTTPS,正常DNS,正常视频下载,正常X 跳转入口,正常现在最终访问地址就是:
https://wx.defou.aiGitHub Actions 自动部署
为了以后修改代码后自动发布,增加了:
.github/workflows/cloudflare-sph.ymlGitHub Secrets 需要配置:
CLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_TOKENSPH_COOKIE工作流顺序是:Checkout、安装 Node.js、npm ci、dry-run 检查、部署 Worker、写入 COOKIE Secret。
首次部署时必须先部署 Worker,再写入 Secret。如果反过来,Worker 还不存在,Secret 写入可能会失败。

常用维护命令
cd /Users/Wangdefou/wx_channels_download/internal/api/sphnpm installnpm run devnpm run checknpm run deploynpx wrangler whoaminpx wrangler secret listnpx wrangler secret put COOKIE最后总结
这次部署真正做的事情,不是把整个桌面下载器搬到 Cloudflare,而是从一个复杂项目里找到最适合云端运行的部分。
桌面端继续负责微信客户端集成、本机代理、证书安装和本地下载控制。
Cloudflare Worker 负责接收视频号分享链接、调用解析接口、返回视频信息、提供网页界面和支持全球访问。
最后形成了一个很轻的在线入口:
https://wx.defou.ai它没有服务器运维成本,也不需要用户安装程序。
打开网页,粘贴视频号链接,直接查询和下载。
对用户来说,只有一个输入框。

粘贴链接。
点击查询。
下载视频。
这可能就是把一个复杂工具做成产品的第一步,不是把所有复杂性都暴露给用户,而是把复杂性藏在后面,只留下一个真正能用的入口。

夜雨聆风