圣堂之魂
CLI 工具

nurl-key 短链管理

nurl-key 工具使用指南,通过无头 API 远程管理短链


nurl-key 是 Short_NURL 的远程短链管理工具,通过无头 API(headless)远程操作短链,需要网络连接

工具定位依赖网络用途
nurl本地管理工具密钥生成/查看/撤销、清理过期数据(点此跳转
nurl-key远程短链客户端通过无头 API 查看/创建/删除短链

本文档使用 {花括号} 标记占位符,使用时请替换为实际值:

占位符含义示例
{你的域名}短链服务部署的域名s.example.com
{su_你的Key}你的 API Keysu_aBcDeFgH1234
{长链接} / {目标长链接}要缩短的原始 URLhttps://example.com/very/long/path
{短链后缀}短链路径部分;普通密钥 1–4 位,服务密钥最长 5 位a1b2
{完整短链地址}生成的完整短链 URLhttps://s.example.com/a1b2
{ISO 8601 过期时间}链接过期时间,ISO 8601 格式2026-05-20T12:00:00+08:00
{永久/临时短链当前数量}当前已有的短链数量12
{永久/临时短链配额上限}配额上限值10000

一、运行方式

cd {项目目录}

php nurl-key -h

二、命令总览

操作说明
-list查看所有短链
-stat查看配额状态
-get "code"查看单条短链
-add创建短链
-rm删除短链
-v查看 nurl-key 客户端内部版本
-h / -help显示帮助信息
-insecure跳过 SSL 证书验证(仅用于内网/自签名证书)

三、参数

参数支持两种赋值格式:

格式示例说明
空格分隔-key "su_xxx"经典格式,值紧随标志
冒号分隔(v2.1 新增)-key:"su_xxx"紧凑格式,同一参数内赋值
参数说明示例
-key "su_xxx"API Key(必填)-key "su_aBcDe..."-key:"su_aBcDe..."
-url "https://..."目标长链接(-add 必填)-url "https://..."-url:"https://..."
-ttl N有效期秒数(默认 0=永久)-ttl 604800-ttl:604800
-code "abc"自定义短链后缀;普通密钥 1-4 位,服务密钥 1-5 位(可选)-code "demo"-code:"demo"
-len 4|5自动生成短码的长度;仅服务密钥生效-len 5-len:5

-len 只影响未指定 -code 时的自动短码。nurl-key 仅接受 45;服务端只对服务密钥应用该参数,常驻密钥和一次性密钥即使传入 -len 5,仍生成 4 位短码。服务密钥的自定义 -code 最长 5 位,其他密钥最长 4 位。


四、使用示例

1. 创建短链

php nurl-key -key:"{su_你的Key}" -add -url:"{目标长链接}" -ttl:0
正在创建短链...
创建成功 ✓
  短链:{完整短链地址}

TTL 常用值:0 永久 · 1800 30分钟 · 3600 1小时 · 86400 1天 · 604800 7天

创建接口成功时固定返回 HTTP 200,响应字段如下:

字段含义
short_url完整短链地址
exp永久短链为 null;临时短链为 ISO 8601 时间
deduptrue 表示复用已有永久短链,未新增冷存储记录
synced热存储是否同步成功;false 时短链暂时可能无法跳转
warning同步失败时的说明;正常时为 null
key_consumed是否消费了一次性密钥

synced=false 时,nurl-key 会在标准错误中显示服务端的 warning;当 key_consumed=true 时,会提示该一次性密钥不可再次使用。


2. 查询短链

php nurl-key -key:"{su_你的Key}" -list

列表接口返回 permanenttemporary 两个数组。每条记录均包含 idurllurlexp;永久短链的 exp 为字符串 "permanent",临时短链为 ISO 8601 时间。过期临时短链会被过滤。


3. 删除短链

php nurl-key -key:"{su_你的Key}" -rm -code:"{短链后缀}"

删除接口返回 { "ok": true, "synced": true|false }。当 synced=false 时,冷存储已经删除成功,但热存储可能仍在短时间内保留旧条目,客户端会显示缓存延迟警告。


4. 查看单条短链

php nurl-key -key:"{su_你的Key}" -get "{短链后缀}"

单条查询返回 idurllurlexp。永久短链的 exp"permanent";临时短链为 ISO 8601 时间;已过期临时短链返回 404 expired


5. 查看配额状态

php nurl-key -key:"{su_你的Key}" -stat

配额接口以冷存储计数为准,返回 perm_counttemp_countperm_limittemp_limithot_available;热存储可用时还会返回 hot_perm_counthot_temp_count。当前 nurl-key 只显示前四项,且接口中的 perm_limit / temp_limit 是普通用户配额字段,不会改写为服务密钥的 svc_perm_limit / svc_temp_limit


6. 密钥权限

操作常驻密钥一次性密钥服务密钥
-add允许允许,认证时立即消费允许,按服务密钥配额阈值检查并支持 -len 4|5
-get允许允许,认证时立即消费允许
-list允许禁止,返回 403 onetime_forbidden允许
-stat允许禁止,返回 403 onetime_forbidden允许
-rm允许禁止,返回 403 onetime_forbidden允许

一次性密钥由服务端在认证阶段立即消费。参数校验失败、短码冲突、查询不存在,甚至调用 -list / -stat / -rm 后收到 403,都不会返还或自动补充该密钥。请通过 php nurl -full 手动补充密钥池。


五、错误处理

错误信息原因
缺少密钥未指定 -key
缺少目标链接-add 未指定 -url
网络错误:...无法连接到服务
错误 (invalid_key): 密钥失效或不正确 [HTTP 406]Key 无效或过期
错误 (onetime_forbidden): 一次性密钥无权进行短链管理 [HTTP 403]一次性密钥调用了列表、配额或删除接口;该密钥已经被消费
错误 (invalid_url): 目标链接无效 [HTTP 400]URL 不是有效的 HTTP / HTTPS 地址
错误 (private_url): 目标链接指向内网地址,已被拒绝 [HTTP 400]SSRF 防护拒绝内网或保留地址
错误 (url_too_long): 目标链接过长(最大 2048 字符) [HTTP 400]URL 超过长度限制
错误 (invalid_ttl): TTL 必须为整数 [HTTP 400]API 收到非整数 TTL
错误 (ttl_exceeded): TTL 超限 [HTTP 400]TTL 小于 0 或超过服务端 ttl_max
错误 (invalid_code): 后缀格式错误 [HTTP 400]后缀字符或长度不符合当前密钥类型限制
错误 (reserved_code): 保留字 [HTTP 400]使用了 API / Nginx 路由保留短码
错误 (conflict): 已占用 [HTTP 409]自定义后缀冲突
错误 (quota_exceeded): 已达上限 [HTTP 429]配额已满
错误 (not_found): 该短链不存在 [HTTP 404]短码不存在
错误 (expired): 该短链已过期 [HTTP 404]查询的临时短链已经过期
错误 (data_inaccessible): 数据文件不可访问,请检查文件权限 [HTTP 430]服务端数据文件不可读写
错误 (data_corrupted): 数据文件损坏,请检查服务端日志 [HTTP 500]服务端 JSON 数据损坏
错误:-len 必须为 4 或 5客户端在发起请求前拒绝了非法 -len

nurl-key 通过无头 API(X-Headless-Token)通信,支持常驻密钥一次性密钥服务密钥三种类型。服务密钥在前端面板 API 中会被拒绝,但在此工具中可正常使用。nurl-key -v 显示的是客户端脚本自身的内部版本,不等同于 Short_NURL 发行包版本。


本页目录