js调用Cloudflare API 批量管理工具

Cloudflare API 批量管理工具

目的

该脚本通过 Cloudflare API 批量添加域名、批量添加 DNS 解析记录、删除域名,并可以更新 DNS 记录的代理状态。脚本使用 JavaScript 和 axios 库,操作 Cloudflare 的 DNS 相关功能。

配置要求

  1. Cloudflare API Token:请在 Cloudflare 的开发者面板获取一个 API Token,并替换 API_TOKEN 变量中的值。
  2. Cloudflare 账户 ID:账户 ID 在 Cloudflare 的 API 中使用,可以从您的 Cloudflare 账户信息中找到。
  3. 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 记录的代理状态。通过适配不同的需求,您可以轻松扩展此工具以满足您的自动化管理需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文略读:Uncovering Hidden Representations in Language Models

202502 arxiv 说一下主要结论吧 对于下游任务,语言模型的中间层在所有架构和任务中始终优于最后一层 这挑战了使用最后一层表示的传统观点。 不同的架构表现出不同的信息压缩模式。自回归模型在中间层存在瓶颈,而双向模型则保持更均匀的趋势 BERT通过双…

0基础学Linux系统(准备1)

知识拓展 首先了解一下操作系统的作用与常见的操作系统。 我们身边常见的操作系统是windows,MACOS,Linux等,手机的操作系统有iOS,安卓等。 这里要学的就是Linux操作系统。 一个可用的计算机,可以说是由硬件和软件一起组成的&a…

在VS中如何将控制台(console)项目改为窗口(window)项目

1. 修改属性: 2. 修改main函数 int WINAPI WinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nShowCmd) //int main()

区块链共识机制详解

区块链共识机制详解 🤝 1. 什么是共识机制? 共识机制是区块链网络中,所有节点就某个状态(如交易的有效性)达成一致的规则和过程。它解决了在去中心化网络中如何确保数据一致性的问题。 2. 主流共识机制 2.1 工作量证…

【项目设计】自主HTTP服务器

目录 项目介绍 网络协议栈介绍 协议分层 数据的封装与分用 HTTP相关知识介绍 HTTP的特点 URL格式 URI、URL、URN HTTP的协议格式 HTTP响应协议格式 HTTP的请求方法 HTTP的状态码 HTTP常见的Header CGI机制介绍 CGI机制的概念 CGI机制的实现步骤 CGI机制的意义 …

阿里云k8s服务部署操作一指禅

文章目录 DockerFile镜像操作阿里云k8s服务部署 DockerFile # 使用 JDK 17 官方镜像 # linux架构:FROM --platformlinux/amd64 openjdk:17-jdk-slim # arm架构:openjdk:17-jdk-slim FROM --platformlinux/amd64 openjdk:17-jdk-slim# 设置工作目录 WORK…

lattice hdl实现spi接口

在lattice工具链中实现SPI接口通常涉及以下步骤: 定义硬件SPI接口的管脚。配置SPI时钟和模式。编写SPI主机或从机的控制逻辑。 展示了如何在Lattice工具链中使用HDL语言(例如Verilog)来配置SPI接口: lattice工程 顶层:spi_slave_top.v `timescale 1ns/ 1ps module spi_…

【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】

文章目录 六大比较类排序算法(插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序)前言1. 插入排序算法描述代码示例算法分析 2. 选择排序算法描述优化代码示例算法分析 3. 冒泡排序算法描述代码示例算法分析与插入排序对比 4. 希尔排序算法描…

OpenHarmony分布式数据管理子系统

OpenHarmony分布式数据管理子系统 简介 目录 组件说明 分布式数据对象数据共享分布式数据服务Key-Value数据库首选项关系型数据库标准数据化通路 相关仓 简介 子系统介绍 分布式数据管理子系统支持单设备的各种结构化数据的持久化,以及跨设备之间数据的同步、…

Linux系统使用Docker部署Geoserver并做数据挂载进行地图服务的发布和游览

文章目录 1、前提环境2、拉取geoserver镜像3、创建数据挂载目录4、 运行容器5、 测试使用(发布shp数据为服务)5.1、创建工作区5.2、添加数据存储5.3、发布图层5.4、服务游览 1、前提环境 部署环境:Linux,Centos7 ,Doc…

MySql数据库运维学习笔记

数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL(结构化查询语言)中的四个重要类别,它们分别用于不同类型的数据库操作,下面为你简单明了地解释这四类语句: 1. DQL(数据查询语言,Data Query Langu…

企业内容中台搭建实战手册

内容概要 在数字化转型浪潮中,内容中台作为企业信息资产的核心枢纽,承担着统一管理、智能分发与持续迭代的战略职能。本手册聚焦于构建企业级内容基础设施的完整生命周期,系统梳理从战略规划到技术落地的全链路方法论。通过对内容生产、存储…

VUE四:Vue-cli

什么是Vue-cli vue-cli是官方提供的一个脚手架,用于快速生成一个vue的项目模板; 预先定义好的目录结构及基础代码,就好比咱们在创建 Maven项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速; 什么是web pack 本质上&#…

如何解决‘找不到vcruntime140_1.dll 无法执行’的问题,vcruntime140_1.dll 的解析

当你满心欢喜地点开游戏或专业软件,却被"找不到vcruntime140_1.dll"的报错弹窗打断,这种突如其来的系统警告总让人措手不及。这个微软Visual C运行库的核心组件缺失,可能导致Adobe全家桶、Steam游戏等各类程序集体罢工。不过别急着…

将产品照片(form.productPhotos)转为 JSON 字符串发送给后端

文章目录 1. 前端 form.productPhotos 的当前处理a. 组件绑定b. 当前发送逻辑 2. 如何将 form.productPhotos 转为 JSON 字符串发送给后端a. 修改前端 save() 方法b. 确保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代码,我将分析如何将产品照片&a…

分布式事务-本地消息表学习与落地方案

本文参考: 数据库事务系列04-本地消息表实现分布式事务 基础概念 本地消息表实现分布式事务最终一致性的核心:是通过上游本地事务的原子性持久性,配合中间件的重试机制,从而实现调用下游的最终一致性。 这里有几个要点可以解析一…

java常见面试场景题

1. 如何定位线上OOM 造成OOM的原因 如何快速定位OOM 2. 如何防止重复下单 方案一:前端提交订单按钮置灰 用户点击下单按钮后置灰,防止用户无意点击多次 方案二: 后端Redis setnx 用户token 商品URL KEY 用setnx 命令并设置过期时间3-5秒防止重复下单…

【微服务】深入解析spring aop原理

目录 一、前言 二、AOP 概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk动态代理模拟实现 3.2 CGLIB 代理…

【JT/T 808协议】808 协议开发笔记 ② ( 终端注册 | 终端注册应答 | 字符编码转换网站 )

文章目录 一、消息头 数据1、消息头拼接2、消息 ID 字段3、消息体属性 字段4、终端手机号 字段5、终端流水号 字段 二、消息体 数据三、校验码计算四、最终计算结果五、终端注册应答1、分解终端应答数据2、终端应答 消息体 数据 六、字符编码转换网站 一、消息头 数据 1、消息头…

go 环境准备

配置路径: GOROOT:D:\GoGOPATH:go的工作目录 D:\workspacego 验证版本:go version 配置第三方仓库: GO111MODULE:开启mod模式GOPROXY:go语言三方库地址GOSUMDB:go语言软件包的M…