cyendlsi
E7Lb9U7F&AVr
export default {
async fetch(request, env) {
const url = new URL(request.url);
const pathname = url.pathname.split(“/”).filter(Boolean);
// 简单鉴权(避免别人乱改你的 KV)
const ADMIN_KEY = env.ADMIN_KEY; // 在 Workers 变量里设置,比如 admin123
// 访问接口: https://xxx.workers.dev/sub/{key}
if (pathname[0] === "sub") {
const key = pathname[1];
if (!key) {
return new Response("Usage: /sub/{key}", { status: 400 });
}
const target = await env.SUB_STORE.get(key);
if (!target) {
return new Response(`No subscription found for key: ${key}`, { status: 404 });
}
const newRequest = new Request(target, {
method: request.method,
headers: request.headers,
body: request.body,
redirect: "manual",
});
const response = await fetch(newRequest);
const newHeaders = new Headers(response.headers);
newHeaders.set("Access-Control-Allow-Origin", "*");
newHeaders.delete("Server");
newHeaders.delete("X-Powered-By");
return new Response(response.body, {
status: response.status,
headers: newHeaders,
});
}
// 管理接口: https://xxx.workers.dev/api/set?key=a&url=xxx (PUT)
if (pathname[0] === "api" && pathname[1] === "set") {
const key = url.searchParams.get("key");
const value = url.searchParams.get("url");
const token = url.searchParams.get("token");
if (token !== ADMIN_KEY) {
return new Response("Unauthorized", { status: 403 });
}
if (!key || !value) {
return new Response("Usage: /api/set?key=a&url=xxx&token=yourkey", { status: 400 });
}
await env.SUB_STORE.put(key, value);
return new Response(`Updated key ${key} -> ${value}`, { status: 200 });
}
// 管理接口: https://xxx.workers.dev/api/get?key=a
if (pathname[0] === "api" && pathname[1] === "get") {
const key = url.searchParams.get("key");
if (!key) {
return new Response("Usage: /api/get?key=a", { status: 400 });
}
const value = await env.SUB_STORE.get(key);
return new Response(value || "Not Found", { status: value ? 200 : 404 });
}
return new Response("Not Found", { status: 404 });
},
};
使用方法
1. 绑定 KV
跟之前一样,创建 KV 命名空间 SUB_STORE 并绑定。
2. 设置管理密钥
在 Workers → Settings → Variables → Environment Variables
添加:
Name: ADMIN_KEY
Value: 你自己设置的管理口令,比如 mysecret123
3. 添加订阅地址(通过 API)
- 更新订阅地址:curl “https://your-worker.workers.dev/api/set?key=a&url=https://1.cy57.ggff.net/sub/xxx&token=mysecret123”
查看订阅地址:
curl “https://your-worker.workers.dev/api/get?key=a”
用户访问订阅内容:
https://your-worker.workers.dev/sub/a
✅ 这样你就能随时通过 API 改订阅地址,不用登录 Cloudflare 控制台了。
明白了,你现在已经部署好了我们之前写的 Cloudflare Workers 完整脚本(支持 /sub/{key} 访问 + /api/set 管理),并且 KV 命名空间和 ADMIN_KEY 都设置好了。
你想通过 API 更新订阅地址,也就是把 https://xzl.choooiox.workers.dev 添加或替换到 KV 中。
下面是详细操作步骤:
1️⃣ API 更新订阅地址的格式
我们脚本的更新接口是:
https://你的Workers域名/api/set?key={订阅Key}&url={订阅地址}&token={ADMIN_KEY}
参数说明:
key→ 订阅的标识,比如a、b、clash等。url→ 实际订阅地址,例如https://xzl.choooiox.workers.dev/subtoken→ 你在 Workers 里设置的ADMIN_KEY,例如mysecret123
2️⃣ 例子
假设:
- Workers 域名:
https://myworker.workers.dev - ADMIN_KEY:
mysecret123 - 你想给 key
a添加订阅地址https://xzl.choooiox.workers.dev/sub
那么请求就是:
curl "https://myworker.workers.dev/api/set?key=a&url=https://xzl.choooiox.workers.dev/sub&token=mysecret123"
成功返回:
Updated key a -> https://xzl.choooiox.workers.dev/sub
3️⃣ 验证订阅是否更新
访问 Workers 的订阅访问接口:
https://myworker.workers.dev/sub/a
- 会返回你刚添加的订阅内容(反代
https://xzl.choooiox.workers.dev/sub) - 浏览器地址栏显示仍然是你的 Workers 域名
4️⃣ 查看 KV 当前订阅地址
curl "https://myworker.workers.dev/api/get?key=a"
- 返回 KV 中存储的订阅地址:
https://xzl.choooiox.workers.dev/sub
5️⃣ 多订阅管理
如果你有多个订阅,可以按同样方式:
curl "https://myworker.workers.dev/api/set?key=b&url=https://xxx.example.com/sub&token=mysecret123"
curl "https://myworker.workers.dev/api/set?key=c&url=https://yyy.example.com/sub&token=mysecret123"
然后访问:
/sub/b
/sub/c
即可分别获取对应订阅。
总结:
- 访问订阅:
/sub/{key} - 添加/更新订阅:
/api/set?key={key}&url={订阅地址}&token={ADMIN_KEY} - 查看订阅:
/api/get?key={key}
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。