/ 未分类 / 11浏览

完整脚本:支持订阅访问 + API 管理

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 → 订阅的标识,比如 abclash 等。
  • url → 实际订阅地址,例如 https://xzl.choooiox.workers.dev/sub
  • token → 你在 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}

1

  1. 您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注