一个程序员因为搬家,被迫折腾了一个下午,最后写了个工具才解决问题的故事。


起因:搬了个家,差点崩溃

前不久搬了家,新地址、新邮编,一切都好。直到我想起来——我在 Cloudflare 注册了一堆域名,每个域名的 WHOIS 联系人信息(Registrant、Technical、Administrator、Billing,四个角色)都还是老地址。

好,打开 Cloudflare Dashboard,准备批量改一下。

然后我就傻眼了。


吐槽一:Dashboard 根本没有"批量修改"

Cloudflare 的域名注册管理页面,你点进每一个域名,可以看到联系人信息,可以一个一个地改。

但就是没有批量操作。

你有 5 个域名?那你要重复填 5 次表。有 20 个域名?20 次。每次都要填:名、姓、地址、城市、州、邮编、国家、电话、邮箱……

我不是没耐心的人,但这个体验,说句不好听的,连 GoDaddy 2010 年的水平都没达到


吐槽二:有 API,但对普通用户来说等于没有

Cloudflare 的开发者 API 其实很完整。注册商相关的接口也有:

PUT /accounts/{account_id}/registrar/domains/{domain}/contacts
PUT /accounts/{account_id}/registrar/address_book/{address_id}

但你得:

  1. 自己去申请一个 API Token(权限还要配置正确)

  2. 从 Dashboard URL 里手动扒出那个 32 位十六进制的 account_id

  3. 先查你默认地址的 address_id,再拿它去更新

  4. 对每个域名,分别调用 contacts 接口,而且 registrant/technical/administrator/billing 四个角色的 body 要自己组装

这不是人干的。普通用户根本不可能走这条路。


吐槽三:CORS 把你堵死在门口

好,我是程序员,我想写个小页面,直接从浏览器调 Cloudflare API,省点事。

结果发现:api.cloudflare.com 的 CORS 策略,不允许从任意第三方页面发请求——即使你在浏览器里已经登录了 Cloudflare,即使有有效的 session cookie。

所以最直接的方案——写个静态页面调 API——直接被封死。


我们的解决过程(以及走过的弯路)

第一版:PHP 后端代理

既然客户端不能直接调 API,那就绕开 CORS,上服务端。

第一版写了一个单文件 PHP 应用,功能挺完整的:

  • 输入 API Token,自动检测账号

  • 拉取所有域名(支持分页)

  • 更新默认地址簿

  • 批量更新所选域名的联系人

  • 更新后自动回读验证,字段级别 diff 对比

功能完善,UI 也不错。但问题来了:要跑 PHP,你得有个服务器。这对大部分想解决问题的普通用户来说,门槛又回来了。而且,把 API Token 输入到一个陌生网站上,安全感很差。

第二版:彻底静态,脚本注入

换了个思路。

既然 CORS 只拦第三方页面,但不拦 dash.cloudflare.com 自己的 Console——那就生成一段 JS 脚本,让用户直接粘贴到浏览器 DevTools 的 Console 里执行。

脚本在 Cloudflare 自己的域下运行,天然有 session 权限,不需要 API Token,CORS 也不是问题。

这个思路解决了所有问题:

  • 零后端:纯静态页面,直接托管在 Cloudflare Pages

  • 零 API Token:用已有的 session cookie 鉴权

  • 零信任风险:生成的脚本你可以自己读,透明可审计

  • 批量更新:一次性并发处理所有域名

工具分三个功能 Tab:

构建体系

工具本身用纯原生 HTML/CSS/JS 写,没有框架。为了部署方便,用 Vite + vite-plugin-singlefile 把所有资源(CSS、JS、SVG 图标、favicon)打包成一个自包含的 HTML 文件

pnpm build  →  dist/index.html(所有资源内联)
pnpm ship   →  自动部署到 Cloudflare Pages

用起来就三步

  1. 打开 cf.ropean.org 填好你的联系信息

  2. 点"Generate Script",复制生成的脚本

  3. 打开 dash.cloudflare.com → F12 → Console → 粘贴 → 回车

搞定。搬家地址更新,5 分钟以内。


最后说两句

Cloudflare 是个很优秀的公司,CDN、DNS、Workers 都做得很好。但在域名注册这个产品上,联系人批量管理这个基础功能的缺失,对于持有多个域名的用户来说,真的是一个很明显的痛点。

官方 API 存在但门槛高,Dashboard 功能缺失,CORS 策略又把自助方案堵死——这一连串的设计决策,逼得我们用"往 DevTools 粘贴脚本"这种方式来绕过去。

如果你也有同样的烦恼,欢迎直接用我们的工具:

https://cf.ropean.org/

开源在 GitHub:ropean/cloudflare-address-updater

代码完全透明,生成的脚本可以自己审计,不存任何数据。


如果 Cloudflare 哪天出了官方批量联系人更新功能,我会很高兴这个工具退休的。