跳到主要内容
使用文档 v1.0

子域名平台使用文档

本平台为你提供免费的二级子域名申请服务:注册账号后即可为个人博客、项目演示或测试环境绑定一个*.moespark.dev形态的子域名,系统会自动在 Cloudflare 中创建并维护对应的 DNS 记录。 本页包含快速上手流程、完整的 REST API 参考、DDNS 动态解析脚本以及常见问题排查。

Getting Started

快速开始

从注册到域名可访问,通常只需两分钟。

  1. 1

    注册账号

    打开 注册页,填写邮箱、用户名与密码(至少 8 位,需含字母和数字)。用户名 3-20 位,仅限字母、数字和下划线。

  2. 2

    登录控制台

    使用邮箱或用户名登录。登录成功后进入 控制台,在「申请新域名」表单中可以看到当前开放的所有根域名区域,以及你剩余的可申请数量。

  3. 3

    填写前缀与目标地址

    选择根域名,填写子域名前缀(例如 moe,最终得到 moe.moespark.dev)以及目标地址。目标填写服务器的 IPv4、IPv6 或一个域名;记录类型会自动推断为 A / AAAA / CNAME。

  4. 4

    提交并等待生效

    提交后系统会立即调用 Cloudflare API 写入 DNS 记录,状态变为 active 即表示记录已创建。等待 DNS 缓存刷新(通常 5 分钟内)后即可访问;若服务器是你的自有主机,记得在 Web 服务中把该域名加入允许的 Host。

Reference

API 参考

所有接口均为 JSON 格式。需要认证的接口依赖登录后下发的会话 Cookie。

通用约定

Base URL: https://domain.moespark.dev

成功响应

{ "ok": true, "data": { ... } }

失败响应

{
  "ok": false,
  "error": "中文错误信息",
  "code": "TAKEN"
}

成功时 HTTP 状态码为 200(部分接口为 2xx),失败时状态码与 code 字段配合使用。code 为可选的机器可读错误码,常见的有 TAKEN(前缀已被占用)、 QUOTA_EXCEEDED(配额已满)、 INVALID_PREFIX / INVALID_TARGET(参数校验失败)、 CF_ERROR(Cloudflare 调用失败)。

接口总览

方法路径说明认证
POST/api/auth/register注册账号,成功后自动登录公开
POST/api/auth/login登录并获取会话 Cookie公开
POST/api/auth/logout退出登录,销毁当前会话可选
GET/api/auth/me获取当前登录用户信息可选
GET/api/zones获取可申请的域名区域公开
GET/api/domains列出我的域名、可用区域与已用配额需要登录
POST/api/domains申请一个子域名并自动写入 DNS需要登录
PATCH/api/domains/{id}修改目标地址、备注或代理开关需要登录(本人或管理员)
DELETE/api/domains/{id}删除子域名并移除 DNS 记录需要登录(本人或管理员)
POST/api/domains/{id}/sync把当前目标地址同步写入 Cloudflare需要登录(本人或管理员)
POST/api/auth/register

注册账号,成功后自动登录

认证:公开

创建新账号。邮箱与用户名均需唯一;密码至少 8 位且需同时包含字母和数字。注册成功后服务端会直接下发会话 Cookie,无需再次登录。为保证接口安全,同一 IP 每小时最多注册 5 次。

请求参数(JSON Body)

字段类型必填说明
emailstring必填邮箱地址,会转换为小写
usernamestring必填3-20 位,仅字母 / 数字 / 下划线
passwordstring必填8-128 位,需含字母与数字

请求示例

bash
curl -i -X POST 'https://domain.moespark.dev/api/auth/register' \
  -H 'Content-Type: application/json' \
  -c cookies.txt \
  -d '{
    "email": "me@example.com",
    "username": "moe_user",
    "password": "S3curePassw0rd"
  }'

响应示例

HTTP/1.1 200 OK
Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax; Path=/

{
  "ok": true,
  "data": {
    "id": 12,
    "username": "moe_user"
  }
}
POST/api/auth/login

登录并获取会话 Cookie

认证:公开

使用邮箱或用户名登录。登录成功后通过 Set-Cookie 写入会话,后续请求只需带上该 Cookie 即可。同一 IP 每 10 分钟最多尝试 10 次,超限返回 429。

请求参数(JSON Body)

字段类型必填说明
accountstring必填邮箱或用户名(不区分大小写)
passwordstring必填账号密码

请求示例

bash
curl -i -X POST 'https://domain.moespark.dev/api/auth/login' \
  -H 'Content-Type: application/json' \
  -c cookies.txt \
  -d '{
    "account": "moe_user",
    "password": "S3curePassw0rd"
  }'

响应示例

HTTP/1.1 200 OK
Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax; Path=/

{
  "ok": true,
  "data": {
    "id": 12,
    "username": "moe_user",
    "role": "user"
  }
}
POST/api/auth/logout

退出登录,销毁当前会话

认证:可选

销毁服务端会话并清除会话 Cookie。该接口幂等:即使当前未登录也会返回成功,便于客户端无脑调用。

请求示例

bash
curl -i -X POST 'https://domain.moespark.dev/api/auth/logout' \
  -b cookies.txt -c cookies.txt

响应示例

{
  "ok": true
}
GET/api/auth/me

获取当前登录用户信息

认证:可选

用于前端判断登录态。未登录时返回 HTTP 401 且 user 为 null。注意本接口的响应结构与其他接口略有不同:用户信息直接位于顶层 user 字段,并在 domainCount 中附带已申请域名数量。

请求示例

bash
curl 'https://domain.moespark.dev/api/auth/me' -b cookies.txt

响应示例

// 已登录
{
  "ok": true,
  "user": {
    "id": 12,
    "email": "me@example.com",
    "username": "moe_user",
    "role": "user",
    "created_at": "2025-10-01 08:30:00"
  },
  "domainCount": 2
}

// 未登录(HTTP 401)
{
  "ok": false,
  "user": null
}
GET/api/zones

获取可申请的域名区域

认证:公开

返回当前开放申请的根域名列表(即「区域 / zone」)。申请子域名时填写其中的 id 作为 zoneId。区域是否开放、每个人在每个区域下最多可申请多少个(maxPerUser),均可由管理员在后台调整。本接口无需登录即可访问,返回的 max_per_user 可用于前端预校验配额。

请求示例

bash
curl 'https://domain.moespark.dev/api/zones'

响应示例

{
  "ok": true,
  "data": [
    {
      "id": 1,
      "name": "moespark.dev",
      "max_per_user": 5
    }
  ]
}
GET/api/domains

列出我的域名、可用区域与已用配额

认证:需要登录

一次返回三部分数据:我的全部未删除子域名(domains)、可申请的区域(zones)以及当前已用配额(used,不含已删除记录)。records 的 status 可能为 provisioning(正在提交到 Cloudflare)、active(已生效)、failed(提交失败)。

请求示例

bash
curl 'https://domain.moespark.dev/api/domains' -b cookies.txt

响应示例

{
  "ok": true,
  "data": {
    "domains": [
      {
        "id": 31,
        "user_id": 12,
        "zone_id": 1,
        "fqdn": "moe.moespark.dev",
        "prefix": "moe",
        "target": "203.0.113.10",
        "record_type": "A",
        "description": "个人博客",
        "status": "active",
        "cf_record_id": "0f3a...c21",
        "ttl": 1,
        "proxied": 0,
        "created_at": "2025-10-01 08:31:02",
        "updated_at": "2025-10-01 08:31:02",
        "zone_name": "moespark.dev"
      }
    ],
    "zones": [
      { "id": 1, "name": "moespark.dev", "max_per_user": 5 }
    ],
    "used": 1
  }
}
POST/api/domains

申请一个子域名并自动写入 DNS

认证:需要登录

校验前缀与目标地址后,立即调用 Cloudflare API 创建 DNS 记录。记录类型自动推断:目标是 IPv4 用 A,IPv6 用 AAAA,域名用 CNAME。返回的 status 为 active 表示已生效,failed 表示写入 Cloudflare 失败(可稍后重试申请)。同一账号每小时最多提交 20 次。

请求参数(JSON Body)

字段类型必填说明
zoneIdnumber必填根域名区域 id,来自 GET /api/zones
prefixstring必填子域名前缀,3-32 位小写字母/数字/连字符
targetstring必填目标 IPv4 / IPv6 / 域名
descriptionstring可选用途备注,最多 200 字符
proxyboolean可选是否开启 Cloudflare 代理(CNAME 记录固定关闭)

请求示例

bash
curl -i -X POST 'https://domain.moespark.dev/api/domains' \
  -H 'Content-Type: application/json' \
  -b cookies.txt \
  -d '{
    "zoneId": 1,
    "prefix": "moe",
    "target": "203.0.113.10",
    "description": "个人博客",
    "proxy": false
  }'

响应示例

{
  "ok": true,
  "data": {
    "id": 31,
    "user_id": 12,
    "zone_id": 1,
    "fqdn": "moe.moespark.dev",
    "prefix": "moe",
    "target": "203.0.113.10",
    "record_type": "A",
    "description": "个人博客",
    "status": "active",
    "cf_record_id": "0f3a...c21",
    "ttl": 1,
    "proxied": 0,
    "created_at": "2025-10-01 08:31:02",
    "updated_at": "2025-10-01 08:31:02"
  }
}
PATCH/api/domains/{id}

修改目标地址、备注或代理开关

认证:需要登录(本人或管理员)

仅修改本地记录,不会立即写入 Cloudflare;需要让改动生效时请再调用 POST /api/domains/{id}/sync(控制台中的「同步」按钮会同时完成两步)。至少传入一个字段。注意:前缀(prefix)申请后不可修改,如确需更换请删除后重新申请。

请求参数

字段类型必填说明
targetstring可选新的目标 IPv4 / IPv6 / 域名
descriptionstring可选用途备注,最多 200 字符
proxiedboolean可选是否开启 Cloudflare 代理

请求示例

bash
curl -i -X PATCH 'https://domain.moespark.dev/api/domains/31' \
  -H 'Content-Type: application/json' \
  -b cookies.txt \
  -d '{ "target": "198.51.100.20", "description": "换到新服务器" }'

响应示例

{
  "ok": true
}
DELETE/api/domains/{id}

删除子域名并移除 DNS 记录

认证:需要登录(本人或管理员)

会同时删除 Cloudflare 中的 DNS 记录,并将本地记录标记为 deleted。删除后该前缀立即释放,可被自己或他人重新申请。操作不可撤销,请确认目标无误(可用 sync 与 GET /api/domains 交叉核对)。

请求示例

bash
curl -i -X DELETE 'https://domain.moespark.dev/api/domains/31' \
  -b cookies.txt

响应示例

{
  "ok": true
}
POST/api/domains/{id}/sync

把当前目标地址同步写入 Cloudflare

认证:需要登录(本人或管理员)

将数据库中的 target 重新推送到 Cloudflare——若 DNS 记录存在则更新,不存在则重建。修改解析、DDNS 更新 IP 后均需调用本接口(或经由 PATCH + sync 两步)。记录类型会按最新 target 自动重新推断。

请求示例

bash
curl -i -X POST 'https://domain.moespark.dev/api/domains/31/sync' \
  -b cookies.txt

响应示例

{
  "ok": true
}

DNS

DNS 配置指南

了解平台创建的记录类型,以及如何把你的服务正确地指向子域名。

记录类型目标填什么典型场景
AIPv4 地址,如 203.0.113.10自有 VPS / 云服务器
AAAAIPv6 地址,如 2001:db8::1启用 IPv6 的服务器
CNAME一个域名,如 your-app.vercel.appVercel / Pages / Netlify 等托管平台

几条实用建议

  • • 记录类型由目标地址自动推断,你无需手动选择。
  • • 在托管平台上(Vercel 等)通常还需在平台侧添加该自定义域名,否则会返回 404。
  • • 服务器上有 Nginx / Apache 时,请把子域名加入 server_name / ServerAlias。
  • • 已开启 Cloudflare 代理(橙色云朵)时,源站证书需与 Cloudflare 的 SSL 模式匹配。

Tutorial

DDNS 动态解析

家庭宽带或云主机的公网 IP 会变化时,用脚本定时把最新 IP 推送到平台,域名始终指向正确的地址。

工作原理

脚本分三步:① 通过公开接口查询本机当前的公网 IPv4;② 与本地缓存的上次结果比对,若未变化则直接退出(避免无意义的 API 调用);③ 若发生变化,先 PATCH /api/domains/<id> 更新目标地址,再调用 POST /api/domains/<id>/sync 把新值写入 Cloudflare。两步缺一不可。

前提:该子域名必须已经存在且状态为 active,并且记录类型为 A(目标为 IPv4)。首次请先登录一次生成 Cookie 文件(curl -c ~/.moespark-cookie.txt ...),然后把下面脚本中的 TOKEN 部分替换为你的配置。

Linux / macOS(Bash)

推荐搭配 cron 每 5 分钟执行
ddns.sh
#!/usr/bin/env bash
# ---------------------------------------------------------------------------
# 子域名平台 DDNS 脚本 —— 把本机公网 IPv4 更新到子域名
#
# 使用方法:
#   1. 保存为 ~/ddns.sh,按需修改下面 CONFIG 区
#   2. chmod 700 ~/ddns.sh
#   3. 首次先手动登录,生成 Cookie 文件(见下方说明)
#   4. crontab -e 添加:*/5 * * * * /home/you/ddns.sh >/dev/null 2>&1
# ---------------------------------------------------------------------------
set -euo pipefail

# ------------------------------- CONFIG ------------------------------------
BASE_URL="https://domain.moespark.dev"
DOMAIN_ID="31"                        # GET /api/domains 返回的子域名 id
COOKIE_FILE="$HOME/.moespark-cookie.txt"
STATE_FILE="$HOME/.moespark-last-ip"
# ---------------------------------------------------------------------------

log() { echo "[$(date '+%F %T')] $*"; }

# 1) 查询公网 IPv4(依次尝试多个来源,任一成功即可)
get_public_ip() {
  local ip
  for url in "https://api.ipify.org" \
             "https://ipv4.icanhazip.com" \
             "https://ifconfig.me/ip"; do
    ip="$(curl -fsS --max-time 10 "$url" 2>/dev/null | tr -d '[:space:]' || true)"
    if [[ "$ip" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; then
      echo "$ip"
      return 0
    fi
  done
  return 1
}

NEW_IP="$(get_public_ip)" || { log "ERROR: 获取公网 IP 失败"; exit 1; }
log "当前公网 IP: $NEW_IP"

# 2) 与上次比对,未变化则退出
if [[ -f "$STATE_FILE" ]] && [[ "$(cat "$STATE_FILE")" == "$NEW_IP" ]]; then
  log "IP 未变化,跳过"
  exit 0
fi

# 3) 先更新目标地址,再同步到 Cloudflare
resp="$(curl -fsS --max-time 15 -X PATCH \
  "$BASE_URL/api/domains/$DOMAIN_ID" \
  -H 'Content-Type: application/json' \
  -b "$COOKIE_FILE" \
  -d "{\"target\":\"$NEW_IP\"}")"
if [[ "$resp" != *'"ok":true'* ]]; then
  log "ERROR: 更新失败 -> $resp"
  exit 1
fi

resp="$(curl -fsS --max-time 15 -X POST \
  "$BASE_URL/api/domains/$DOMAIN_ID/sync" \
  -b "$COOKIE_FILE")"
if [[ "$resp" != *'"ok":true'* ]]; then
  log "ERROR: 同步失败 -> $resp"
  exit 1
fi

echo "$NEW_IP" > "$STATE_FILE"
log "更新成功: 子域名已指向 $NEW_IP"

# ---------------------------------------------------------------------------
# 首次生成 Cookie 文件(手动执行一次):
#   curl -c ~/.moespark-cookie.txt -H 'Content-Type: application/json' \
#     -d '{"account":"你的用户名","password":"你的密码"}' \
#     https://domain.moespark.dev/api/auth/login
#   chmod 600 ~/.moespark-cookie.txt
# 提示:Cookie 有有效期,若脚本持续报 401,重新执行上面的登录命令即可。
# ---------------------------------------------------------------------------

Windows(PowerShell)

用「任务计划程序」每 5 分钟执行
ddns.ps1
# ---------------------------------------------------------------------------
# 子域名平台 DDNS 脚本(Windows PowerShell 5.1+ / PowerShell 7+)
#
# 用法:
#   1. 保存为 C:\Tools\ddns.ps1,修改 CONFIG 区
#   2. 首次手动登录生成 Cookie(见文件末尾说明)
#   3. 任务计划程序 -> 创建任务 -> 触发器「每 5 分钟重复」 ->
#      操作:powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Tools\ddns.ps1
# ---------------------------------------------------------------------------
$ErrorActionPreference = 'Stop'

# ------------------------------- CONFIG ------------------------------------
$BaseUrl    = 'https://domain.moespark.dev'
$DomainId   = '31'
$CookieFile = Join-Path $env:USERPROFILE '.moespark-cookie.txt'
$StateFile  = Join-Path $env:USERPROFILE '.moespark-last-ip'
# ---------------------------------------------------------------------------

function Write-Log([string]$Message) {
  Write-Output ("[{0}] {1}" -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $Message)
}

# 1) 查询公网 IPv4
$NewIp = $null
foreach ($url in @('https://api.ipify.org', 'https://ipv4.icanhazip.com')) {
  try {
    $candidate = (Invoke-RestMethod -Uri $url -TimeoutSec 10).ToString().Trim()
    if ($candidate -match '^\d{1,3}(\.\d{1,3}){3}$') { $NewIp = $candidate; break }
  } catch {
    Write-Log "查询 $url 失败,尝试下一个来源"
  }
}
if (-not $NewIp) { Write-Log 'ERROR: 获取公网 IP 失败'; exit 1 }
Write-Log "当前公网 IP: $NewIp"

# 2) 未变化则退出
if ((Test-Path $StateFile) -and ((Get-Content $StateFile -Raw).Trim() -eq $NewIp)) {
  Write-Log 'IP 未变化,跳过'
  exit 0
}

# 3) 复用已保存的会话 Cookie
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
if (-not (Test-Path $CookieFile)) {
  Write-Log "ERROR: 找不到 Cookie 文件 $CookieFile,请先手动登录"
  exit 1
}
Get-Content $CookieFile | ConvertFrom-Json | ForEach-Object {
  $cookie = New-Object System.Net.Cookie($_.Name, $_.Value, '/', 'domain.moespark.dev')
  $session.Cookies.Add($cookie)
}

$jsonHeaders = @{ 'Content-Type' = 'application/json' }

# 4) 更新目标地址
try {
  $body = @{ target = $NewIp } | ConvertTo-Json -Compress
  $r1 = Invoke-RestMethod -Method Patch -Uri "$BaseUrl/api/domains/$DomainId" `
        -WebSession $session -Headers $jsonHeaders -Body $body -TimeoutSec 15
} catch {
  Write-Log "ERROR: 更新失败 -> $($_.Exception.Message)"
  exit 1
}

# 5) 同步到 Cloudflare
try {
  $r2 = Invoke-RestMethod -Method Post -Uri "$BaseUrl/api/domains/$DomainId/sync" `
        -WebSession $session -TimeoutSec 15
} catch {
  Write-Log "ERROR: 同步失败 -> $($_.Exception.Message)"
  exit 1
}

if ($r1.ok -and $r2.ok) {
  Set-Content -Path $StateFile -Value $NewIp -Encoding utf8
  Write-Log "更新成功: 子域名已指向 $NewIp"
} else {
  Write-Log 'ERROR: 接口返回失败'
  exit 1
}

# ---------------------------------------------------------------------------
# 首次手动登录 & 导出 Cookie(在 PowerShell 中执行一次):
#   $s = New-Object Microsoft.PowerShell.Commands.WebRequestSession
#   Invoke-RestMethod -Method Post -Uri 'https://domain.moespark.dev/api/auth/login' `
#     -WebSession $s -ContentType 'application/json' `
#     -Body '{"account":"你的用户名","password":"你的密码"}'
#   $s.Cookies.GetCookies('https://domain.moespark.dev') |
#     Select-Object Name, Value | ConvertTo-Json | Set-Content $env:USERPROFILE\.moespark-cookie.txt
# ---------------------------------------------------------------------------

容器 / 群晖等环境的一行命令

若不想写脚本,也可以把两条 curl 直接写进 cron 或 Docker 的定时任务:

bash
IP=$(curl -fsS https://api.ipify.org) && \
curl -fsS -X PATCH "https://domain.moespark.dev/api/domains/31" \
  -H 'Content-Type: application/json' -b ~/.moespark-cookie.txt \
  -d "{\"target\":\"$IP\"}" && \
curl -fsS -X POST "https://domain.moespark.dev/api/domains/31/sync" \
  -b ~/.moespark-cookie.txt

FAQ

常见问题

Q1已经申请成功,但为什么解析没生效?

最常见的原因是 DNS 缓存,而不是配置错误。请按以下顺序排查:

1. 确认记录状态:调用 GET /api/domains,status 为 active 才说明已写入 Cloudflare;provisioning 表示还在提交,failed 表示写入失败,需要重试。

2. 等待 TTL:平台创建的记录 TTL 为自动(Cloudflare 默认 300 秒)。本机或运营商的递归 DNS 可能仍缓存着旧结果,通常 5-10 分钟内会自然更新。

3. 清除本地缓存:Windows 执行 ipconfig /flushdns;macOS 执行 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder;Linux systemd 系执行 sudo resolvectl flush-caches。

4. 换一个解析器验证:dig @1.1.1.1 moe.moespark.dev +short,若公共 DNS 已正确而本机仍不对,说明是本地缓存问题。

5. 用在线工具交叉检查:如 DNS Checker(dnschecker.org),可以看到全球各节点的解析结果。

Q2开启代理(proxy)后,可以把目标填成一个域名吗?

不可以。Cloudflare 的橙色云朵代理只适用于 A / AAAA(指向 IP)记录。平台的实现中,CNAME 记录会强制关闭代理(proxied 恒为 0),即使你在请求里传了 proxy: true 也会被忽略。

如果你的站点在 Vercel、Cloudflare Pages、Netlify 等平台,请把目标填成该平台提供的域名(例如 your-app.vercel.app),系统会自动创建 CNAME 记录。

Q3子域名可以绑定 HTTPS 证书吗?

可以,而且推荐。平台本身不签发证书,但提供了两条路径:

① 你在 Cloudflare 面板里为根域名开启了 SSL/TLS,且子域名记录处于「已代理」(橙色云朵)状态 —— 此时访问流量先经过 Cloudflare,会自动使用通配符边缘证书提供 HTTPS,你的源站只需在 Cloudflare 的 SSL/TLS 模式中配置(推荐 Full 或 Full Strict)。

② 记录未代理(灰色云朵,直连)时,需要你在自己的服务器上为子域名申请证书。Let's Encrypt 支持 HTTP-01 与 DNS-01 验证,例如使用 acme.sh / certbot 为 moe.moespark.dev 签发,记得 90 天内续期。

注意:Let's Encrypt 对单个根域名的通配符证书使用 DNS-01,需要你拥有该根域名的 DNS 控制权;本平台的根域名不提供 DNS API 给你,因此通配符证书无法自行签发,只能为具体子域名单独签发。

Q4每个人的配额是多少?如何调整?

配额按「区域」分别计算,默认每个区域每人最多 5 个(max_per_user),可在申请页与 GET /api/zones 的返回中看到当前值。已用数量 = 未删除的子域名数量,删除后立即释放。

调整配额需要管理员在后台操作:登录后进入 /admin,在「域名区域」中修改对应区域的 max_per_user,保存后即时生效,无需重启服务。

普通用户无法自行修改配额。如有正当需求(例如教学演示、比赛项目需要多个子域名),请通过 README 中公布的联系邮箱说明用途,管理员会酌情评估。

Q5前缀有什么命名限制?

长度 3-32 位,只能包含小写字母、数字和连字符(-),不能以连字符开头或结尾。纯数字前缀至少 6 位(避免与 IP 地址混淆)。

以下属于保留名称,不可申请:www、mail、smtp、pop、imap、ftp、ns、ns1、ns2、dns、admin、api、app、blog、shop、cdn、static、assets、img、images、dev、test、staging、portal、panel、root、system、support、help、status、autoconfig、autodiscover、_dmarc、mx、vpn、git 等(完整列表以后端校验为准)。

命名需符合《服务条款》的可接受使用要求:禁止使用与他人商标、品牌、政府机构或知名服务相同或近似的名称。

Q6API 调用报 401 / 403 / 429 分别是什么意思?

401 Unauthorized:未登录或会话已过期。请重新登录并带上 Cookie。

403 Forbidden:已登录但无权操作(例如操作别人的域名),或者提交内容被风控拒绝(区域已停止申请、达到配额上限)。

429 Too Many Requests:触发了限流。注册每小时 5 次/IP,登录每 10 分钟 10 次/IP,域名申请每小时 20 次/账号。请等待响应中提示的时间后重试。

502 Bad Gateway:调用 Cloudflare API 失败(例如 DNS 中已存在同名记录、Token 失效)。这类问题请稍后重试,或联系管理员。

Q7支持 API Token 而不是 Cookie 调用吗?

当前版本仅支持基于 Cookie 的会话认证,没有开放个人 API Token。所有需要登录的接口都依赖登录后下发的 session Cookie。

这也是 DDNS 脚本必须显式保存 Cookie 的原因(见上文脚本中的 -c / -b 参数)。脚本首次运行时请手动登录一次生成 Cookie 文件,之后定时复用。请注意 Cookie 文件属于敏感凭据,务必设置为仅本人可读(chmod 600)。

没找到答案?

欢迎通过 admin@moespark.dev 联系我们,或查阅 服务条款 与 隐私政策。