开发文档
v3.6.9快速开始
- 注册并登录,进入「用户中心 → API 接口」拿到你的
API Key; - 把下面的地址换成你的 Key,浏览器打开就是一条短链:
https://dwz.dnfsf.vip/api.htm?url=https%3A%2F%2Fwww.example.com%2Fvery%2Flong%2Fpath&key=你的API_KEY
返回纯文本短链。想要结构化结果就加上 &format=json。
接口一览
| 能力 | 地址 | 鉴权 |
|---|---|---|
| 生成短链(推荐) | https://dwz.dnfsf.vip/api.htm | key 参数 |
| 生成 / 统计 / 列表 / 账户 | https://dwz.dnfsf.vip/api.php?action=… | key 参数 |
| 兼容老脚本的 POST 调用 | https://dwz.dnfsf.vip/api.php | 无需 key(走游客规则) |
| 上传文件生成媒体短链 | https://dwz.dnfsf.vip/upload.php | 需登录 Cookie |
不传 domain 时,短链挂在哪个域名
兼容接口 /api.htm
最常用GET 或 POST 均可。参数名与常见短链平台(3wt、新浪短链那一类)一致,老代码基本不用改。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
| url | 是 | 要缩短的地址,建议 urlencode,如 http%3A%2F%2Fwww.baidu.com |
| key | 是 | 你的 API Key |
| format | 否 | json / jsonp;不传返回纯文本 |
| callback | 否 | format=jsonp 时的回调函数名,如 cb |
| expireDate | 否 | 如 2030-03-31 或 2030-03-31 18:00:00;留空默认 3 个月;≥ 2040-01-01 表示永久 |
| domain | 否 | 域名编号(见下表,如 3 或 u8),也可直接写完整域名;留空用默认域名(开了「短链不使用主域名」时是共享域名里的第一个,否则是主站域名) |
| protocol | 否 | 1 = 带 http(s)://(默认);0 = 不带 |
| alias | 否 | 自定义短码(需套餐允许、长度符合站点规则) |
| title | 否 | 短链备注名,方便自己在后台辨认 |
| tinyUrlGroupId | 否 | 分组 ID,本系统暂不分组,传了只做记录,不影响结果 |
返回字段
| 字段 | 说明 |
|---|---|
| code | 字符串 "0" 成功,"1" 失败 |
| url | 生成的短网址;失败时原样返回你传进来的 url |
| err | 失败原因,成功时为空字符串 |
域名编号(domain 填这一列)
| 编号 | 域名 |
|---|---|
| 3 | dw.dnfsf.vip |
共享域名写编号(如 &domain=3);
自己的专属域名加前缀 u(如 &domain=u8),避免和共享域名重号。
调用示例 · 纯文本
GET https://dwz.dnfsf.vip/api.htm?url=https%3A%2F%2Fwww.example.com&key=你的KEY&expireDate=2030-03-31 → https://dwz.dnfsf.vip/Ab3xY9
调用示例 · JSON
GET https://dwz.dnfsf.vip/api.htm?format=json&url=https%3A%2F%2Fwww.example.com&key=你的KEY
→ {"code":"0","url":"https://dwz.dnfsf.vip/Ab3xY9","err":""}
调用示例 · JSONP(跨域直接用 script 标签)
GET https://dwz.dnfsf.vip/api.htm?format=jsonp&url=https%3A%2F%2Fwww.example.com&callback=cb&key=你的KEY
→ cb({"code":"0","url":"https://dwz.dnfsf.vip/Ab3xY9","err":""});
curl
curl "https://dwz.dnfsf.vip/api.htm?format=json&key=你的KEY" \
--data-urlencode "url=https://www.example.com/very/long/path"
PHP
<?php
$api = 'https://dwz.dnfsf.vip/api.htm';
$q = http_build_query(array(
'key' => '你的KEY',
'format' => 'json',
'url' => 'https://www.example.com/very/long/path',
));
$json = json_decode(file_get_contents($api . '?' . $q), true);
echo $json['code'] === '0' ? $json['url'] : ('失败:' . $json['err']);
Node.js(18+)
const api = 'https://dwz.dnfsf.vip/api.htm';
const qs = new URLSearchParams({ key: '你的KEY', format: 'json', url: 'https://www.example.com' });
const r = await fetch(`${api}?${qs}`).then(r => r.json());
console.log(r.code === '0' ? r.url : r.err);
Python 3
import requests
r = requests.get('https://dwz.dnfsf.vip/api.htm', params={
'key': '你的KEY', 'format': 'json',
'url': 'https://www.example.com/very/long/path',
}).json()
print(r['url'] if r['code'] == '0' else r['err'])
通用接口 /api.php
带 action 参数时走这一套,返回统一 JSON:
{"code":200,"msg":"ok","data":{…}}。
| action | 作用 | 主要参数 |
|---|---|---|
| shorten | 生成短链 / 密语 | url 或 message、alias、password、expires、domain、device、region |
| stats | 单条短链的访问统计 | code |
| list | 我的短链列表(分页) | page、per |
| account | 账户与额度信息 | — |
参数
| 参数 | 说明 |
|---|---|
| key | API Key(必填) |
| action | shorten / stats / list / account |
| url | action=shorten:目标网址 |
| message | action=shorten:密语内容(与 url 二选一) |
| alias | 自定义短码 |
| password | 访问密码 |
| expires | 过期时间,YYYY-MM-DD |
| max_clicks | 最大访问次数,0 为不限 |
| code | action=stats:短码 |
示例:生成短链
POST https://dwz.dnfsf.vip/api.php key=你的KEY action=shorten url=https://example.com/very/long/path
返回
{
"code": 200,
"msg": "ok",
"data": { "shorturl": "https://dwz.dnfsf.vip/Ab3xY9", "code": "Ab3xY9" }
}
上传文件(媒体短链)
需要先登录(带浏览器 Cookie)。multipart/form-data POST:
POST https://dwz.dnfsf.vip/upload.php
file=@photo.jpg
kind=image # image | audio | video | file
→ {"ok":true,"code":"Ab3xY9","url":"https://dwz.dnfsf.vip/Ab3xY9","name":"photo.jpg","size":102400,"kind":"image"}
错误码与提示
兼容接口(code 为 "0"/"1")
| err 内容 | 原因 / 处理 |
|---|---|
| 缺少 url 参数 | url 没传或为空 |
| 缺少 key 参数… | 未带 key,去用户中心拿 |
| key 无效或已被重置 | Key 写错或在别处重置过,请重新复制 |
| 该账号已被停用 | 账号被封禁,联系管理员 |
| 本月 API 调用次数已用完 | 套餐额度用完,下月 1 日重置或升级套餐 |
| expireDate 格式不正确 | 用 2030-03-31 这种格式 |
| domain 参数无效… | 编号不存在 / 不是你的专属域名 / 未通过验证 |
| 接口已关闭 | 站长在后台关掉了开放 API |
通用接口(code 为数字)
| code | 含义 |
|---|---|
| 200 | 成功 |
| 400 | 参数错误或生成失败(看 msg) |
| 401 | key 缺失 / 无效 |
| 403 | 接口关闭,或账号被停用 |
| 404 | 短码不存在或不属于当前账号 |
| 429 | 超出套餐的每月调用次数 |
额度、规则与限制
- 调用成功才计一次额度;额度按自然月统计,每月 1 日 00:00 重置。
- 目标地址必须以
http://或https://开头,javascript:、data:等伪协议会被拒绝。 - 短码区分大小写,长度与字符集由站长在后台配置;默认字符集为大小写字母 + 数字。
- 同一账号重复提交相同的「内容 + 类型 + 密码」会直接复用已有的短链,不会重复占用额度。
- 演示站可能开启了「访问验证」「防红跳转」「广告插页」,这些属于站点策略,不影响接口返回的短链。
常见问题:短链打开 404
短链(域名/短码)在服务器上并不存在真实文件,
需要「伪静态」把请求转交给 index.php。没配置好就会全站 404。
Nginx(宝塔 / 1Panel):网站 → 设置 → 伪静态,粘贴
location / {
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php?id=$1 last;
}
}
Apache / LiteSpeed
安装包根目录已带 .htaccess,上传到网站根目录即可(隐藏文件,FTP 要开启显示隐藏文件)。
子域名(go.xxx.com / qwe.xxx.com)打开也是 404?
A 记录解析到服务器只是第一步,还得让服务器「愿意接」这个域名。两种做法:
· 省事做法(推荐,一次配好以后不用再加):把本站设成默认站点 ——
宝塔「网站 → 站点列表上方 默认站点 → 选本站」,或 Nginx 写
listen 80 default_server; server_name _;。
之后任何指向本机的域名都会进本站,用户加多少域名都不用改服务器。
· 逐个做法:宝塔:网站 → 主站 → 设置 → 域名管理 → 添加域名(不要用「新建站点」单独建一个)。
配完在后台「短链域名 → 接入检测」确认;程序侧默认开启域名白名单,只有登记过的域名才会解析短链。
还不行?按顺序排查
- 后台「系统设置 → 站点信息」里的站点地址,是否和你实际访问的域名完全一致(含 http/https、有无 www、有无子目录);
- 后台「系统工具 → 短链访问自检」,看检测结果给出的具体原因;
- CDN / 防火墙(宝塔 WAF、安全狗)是否拦截了不存在的路径,先关掉试一次;
- 页面显示「链接不存在」而不是 404,说明伪静态是通的,是短码本身错误 / 过期 / 被删。
更完整的规则(IIS、子目录部署、缓存排查)见安装包里的 伪静态规则.txt。