Cloudflare API 批量管理工具
目的
该脚本通过 Cloudflare API 批量添加域名、批量添加 DNS 解析记录、删除域名,并可以更新 DNS 记录的代理状态。脚本使用 JavaScript 和 axios
库,操作 Cloudflare 的 DNS 相关功能。
配置要求
- Cloudflare API Token:请在 Cloudflare 的开发者面板获取一个 API Token,并替换
API_TOKEN
变量中的值。 - Cloudflare 账户 ID:账户 ID 在 Cloudflare 的 API 中使用,可以从您的 Cloudflare 账户信息中找到。
- Node.js 环境:该脚本要求 Node.js 环境,并安装了
axios
库。
安装依赖
确保已安装 axios
:
npm install axios
脚本说明
Cloudflare API 配置
const axios = require('axios');
// Cloudflare API 配置
const API_TOKEN = "API_TOKEN";
const ACCOUNT_ID = "ACCOUNT_ID";
// 公用 Headers
const HEADERS = {
Authorization: `Bearer ${API_TOKEN}`,
"Content-Type": "application/json"
};
批量添加域名
该功能用于通过 API 添加多个域名到 Cloudflare。
async function addZone(domain) {
try {
const response = await axios.post(
"https://api.cloudflare.com/client/v4/zones",
{
name: domain,
account: { id: ACCOUNT_ID },
jump_start: false
},
{ headers: HEADERS }
);
if (response.data.success) {
const zoneId = response.data.result.id;
console.log(`域名 ${domain} 添加成功,Zone ID: ${zoneId}`);
return zoneId;
} else {
console.error(`域名 ${domain} 添加失败:`, response.data.errors);
return null;
}
} catch (error) {
console.error(`添加域名 ${domain} 时出错:`, error.message);
return null;
}
}
批量添加解析记录
通过 zoneId 和域名对应的解析记录,自动添加解析记录。
async function addDnsRecord(zoneId, recordType, name, content) {
try {
const response = await axios.post(
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`,
{
type: recordType,
name: name,
content: content,
proxied: true // 开启代理
},
{ headers: HEADERS }
);
if (response.data.success) {
console.log(`解析记录 ${name} 添加成功`);
} else {
console.error(`解析记录 ${name} 添加失败:`, response.data.errors);
}
} catch (error) {
console.error(`添加解析记录 ${name} 时出错:`, error.message);
}
}
删除域名
删除指定的域名。
async function deleteZone(zoneId, domainName) {
try {
const response = await axios.delete(
`https://api.cloudflare.com/client/v4/zones/${zoneId}`,
{ headers: HEADERS }
);
if (response.data.success) {
console.log(`域名 ${domainName} 删除成功`);
} else {
console.error(`域名 ${domainName} 删除失败:`, response.data.errors);
}
} catch (error) {
if (error.response) {
console.error(
`请求失败: ${error.response.status} - ${JSON.stringify(error.response.data.errors)}`
);
} else {
console.error(`删除域名 ${domainName} 时出错:`, error.message);
}
}
}
获取域名的 Zone ID
根据域名获取对应的 Zone ID。
async function getZoneId(domain) {
try {
const response = await axios.get("https://api.cloudflare.com/client/v4/zones", {
headers: HEADERS,
params: { name: domain }
});
if (response.data.success && response.data.result.length > 0) {
return response.data.result[0].id;
} else {
console.error(`未找到域名 ${domain} 的 Zone ID`);
return null;
}
} catch (error) {
console.error(`获取域名 ${domain} 的 Zone ID 时出错:`, error.message);
return null;
}
}
更新 DNS 记录代理状态
更新域名的 DNS 记录代理状态。
async function updateDnsProxy(zoneId, dnsRecord, proxied = true) {
try {
const response = await axios.put(
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records/${dnsRecord.id}`,
{
type: dnsRecord.type,
name: dnsRecord.name,
content: dnsRecord.content,
ttl: dnsRecord.ttl,
proxied: proxied
},
{ headers: HEADERS }
);
if (response.data.success) {
console.log(`DNS 记录 ${dnsRecord.name} 的代理状态已更新为: ${proxied}`);
} else {
console.error(`更新 DNS 记录 ${dnsRecord.name} 的代理状态失败:`, response.data.errors);
}
} catch (error) {
console.error(`更新代理状态时出错:`, error.response?.data || error.message);
}
}
主函数:批量添加域名和解析记录
执行批量添加域名及解析记录的操作。
async function main() {
// 域名列表
const domains = [
"test1.pw",
"test2.pw",
];
// DNS 解析记录模板
const dnsRecords = [
{ type: "A", name: "www", content: "1.1.1.1" },
];
for (const domain of domains) {
// 添加域名
const zoneId = await addZone(domain);
if (zoneId) {
// 添加解析记录
for (const record of dnsRecords) {
await addDnsRecord(zoneId, record.type, `${record.name}.${domain}`, record.content);
}
}
}
}
执行脚本
运行脚本并捕获错误信息:
main().catch((error) => {
if (error.response) {
console.error(`请求失败: ${error.response.status} - ${error.response.data.errors}`);
} else {
console.error(`请求错误: ${error.message}`);
}
});
总结
此脚本通过 Cloudflare API 完成批量添加域名、批量添加 DNS 解析记录、删除域名,并能够更新 DNS 记录的代理状态。通过适配不同的需求,您可以轻松扩展此工具以满足您的自动化管理需求。