CloudFlare API:批量添加域名并添加解析记录

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:小生博客网络

小提示:您能找到这篇{CloudFlare API:批量添加域名并添加解析记录}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的CloudFlare API:批量添加域名并添加解析记录内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

这里先说一下,CloudFlare是一家DNS供应商(我是这么理解的),他有提供很多服务(HTTPS/CDN等等),具体的大家可以自己去官网看一下:www.cloudflare.com

CloudFlare建议使用linux的curl命令使用开发的API

因shell不能很好的处理CloudFlare返回的json数据,所以在使用shell的基础上,增加了python脚本

本文件一共有四个脚本文件配合使用:

domians.txt :用来存放需要添加的域名

env.env :存放各种变量

filter_zone_id.py :用于将CloudFlare返回的数据过滤(过滤出域名及其区域ID)

filter_dns_id.py :用于将CloudFlare返回的数据过滤(过滤出解析记录及其区域ID)

main.sh :存放linux命令,执行时也是执行这一个脚本即可

一、 domain.txt就不用介绍了,就是把顶级域名写到里面,一行一个

 env.env

登录后复制

  #!/bin/bash

#通用变量

#当前目录



PWD=$(pwd)

PYTHON=$(which python)

ECHO=$(which echo)

#这里DNS指的是解析记录

#账号

CF_API_EMAIL=CloudFlare的登录账号

#秘钥

CF_API_KEY=在用户信息里面查看“Global KEY”

#组织名

organization_name="组织名"

#组织ID

organization_id="组织ID"

#设置CNAME 和 IP

CONTENT_CNA网站建设】ME=域名需要解析的别名“CNAME”

CONTENT_IP=域名需要解析的别名IP

#get_zone_id.cf     -- 存放新增域名时Cloudflare返回的JSON 数据

#get_dns_id.cf      -- 存放获取DNS_ID时Cloudflare返回的JSON 数据

#filter_zone_id.py  -- 用于从 "get_zone_id.cf" 中过滤出域名及其相对应的区域ID并写入文件 "zone_id.cf"

#filter_dns_id.py   -- 用于从 "get_dns_id.cf" 中过滤出DNS_ID及其DNS_NAME并写入文件 "dns_id.cf"

二、main.sh

登录后复制

#!/bin/bash

source ./env.env

#新增域名

for domain in $(cat $PWD/domains.txt)

do

    curl -X POST -H "X-Auth-Key: ${CF_API_KEY}"

    -H "X-Auth-Email: ${CF_API_EMAIL}"

    -H "Content-Type: application/json" "https://api.cloudflare.com/client/v4/zones"

     --data '{"name":"'"${domain}"'","jump_start":true,"organization":{"name":"'"${organization_name}"'","id":"'"${organization_id}"'"}}' >> $PWD/get_zone_id.cf

    ${ECHO} -e " " >> $PWD/get_zone_id.cf

done

#执行python脚本,过滤出域名的区域ID

$PYTHON $PWD/filter_zone_id.py

#获取DNS ID列表

while read line

do

    ZONE_NAME=$(${ECHO} "$line" | awk '{print $1}')

    ZONE_ID=$(${ECHO} "$line" | awk '{print $2}')

    curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records"

         -H "X-Auth-Email: ${CF_API_EMAIL}" -H "X-Auth-Key: ${CF_API_KEY}"

         -H "Content-Type: application/json" >> $PWD/get_dns_id.cf

    ${ECHO} -e " " >> $PWD/get_dns_id.cf

done < $PWD/zone_id.cf

#执行python脚本,过滤出DNS_ID

$PYTHON $PWD/filter_dns_id.py

#删除DNS记录

#删除DNS记录还需要指定区域ID,每个域名的区域DI不同,所以进行一个判断,判断DNS_NAME是否模糊匹配之前取到的ZONE_NAME

#如果匹配则使用这个ZONE_ID

while read zone

do

    ZONE_NAME=$(${ECHO} "$zone" | awk '{print $1}')

    ZONE_ID=$(${ECHO} "$zone" | awk '{print $2}')

    while read dns

    do

        DNS_NAME=$(${ECHO} "$dns" | awk '{ print $1 }')

        DNS_ID=$(${ECHO} "$dns" | awk '{ print $2 }')

        if [[ "*$DNS_NAME" =—— "$ZONE_NAME" ]]

        then

            curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_ID}"

                 -H "X-Auth-Email:${CF_API_EMAIL}"

                 -H "X-Auth-Key:${CF_API_KEY}"

                 -H "Content-Type:application/json"

        fi

    done < $PWD/dns_id.cf

done < $PWD/zone_id.cf

#增加DNS记录

#TTL=1 为自动

#proxied=true 使用CF的CDN,等于false是不使用

#data传入变量格式: "'"$EVN"'"

#设置变量

while read line

do

    ZONE_NAME=$(${ECHO} "$line" | awk '{print $1}')

    ZONE_ID=$(${ECHO} "$line" | awk '{print $2}') 

    curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records"

         -H "X-Auth-Email:${CF_API_EMAIL}"

         -H "X-Auth-Key:${CF_API_KEY}"

         -H "Content-Type:application/json"

         --data '{"type":"A","name":"@","content":"'"${CONTENT_IP}"'","ttl":1,"priority":10,"proxied":true}'

    curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records"

         -H "X-Auth-Email:${CF_API_EMAIL}"

         -H "X-Auth-Key:${CF_API_KEY}"

         -H "Content-Type:application/json"

         --data '{"type":"CNAME","name":"www","content":"'"${CONTENT_CNAME}"'","ttl":1,"priority":10,"proxied":false}'

    curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records"

         -H "X-Auth-Email:${CF_API_EMAIL}"

         -H "X-Auth-Key:${CF_API_KEY}"

         -H "Content-Type:application/json"

         --data '{"type":"CNAME","name":"m","content":"'"${CONTENT_CNAME}"'","ttl":1,"priority":10,"proxied":false}'

done < $PWD/zone_id.cf

三、filter_zone_id.py

登录后复制

#!/usr/bin/env python

#*- coding:utf-8 -*

#打开文件获取添加域名成功后返回的数据,然后获取到域名的区域ID

#通过区域ID获取DNS列表

import json

import os

import traceback

#traceback 完整输出报错信息

#str(e) 只给出异常信息,不包括异常信息的类型宝洁公司危机公关现状,如1/0的异常信息

#repr(e) 给出较全的异常信息,包括异常信息的类型,如1/0的异常信息

PWD = os.getcwd()

PWD_GET = PWD+'/get_zone_id.cf'

PWD_ZONE = PWD+'/zone_id.cf'

ERROR_FILE = PWD+'/zone_error.log'

#读取添加域名时返回的字符串,并且循环写入字典,以便于过滤出域名的区域ID

with open (PWD_GET,'r') as file:

    i = 0

    j = 0

    dict = {}

    list = []

    for line in file:

        if line.strip  == " " or line == " " or line == " ":

            continue



        try:

            dict[i]=json.loads(line)

            i+=1

        except Exception as e:

            j+=1

            with open (ERROR_FILE,'a+') as file:

                title = "---------- 第%d条报错信息 ---------"%(j) + " "

                #info = "报错信息:" + traceback.format_exc() + " "

                info = "报错信息:" + repr(e) + " "

                mation = "报错行:" + line + " "

                file.writelines(title)

                file.writelines(info)

                file.writelines(mation)

            continue



#获取所有的key,然后进行循环遍历,获取每个域名的区域ID

keys_list = dict.keys()

for key in keys_list:

    ID=dict[key]['result']['id']

    NAME=dict[key]['result']['name']

    with open (PWD_ZONE,'a+') as file:

        line = NAME + " " + ID + " "

        file.writelines(line)

四、filter_dns_id.py

登录后复制

#!/usr/bin/env python

#*- coding:utf-8 -*

#打开文件读取cloudflare返回的DNS ID

import json

import os

PWD = os.getcwd()

PWD_GET = PWD+'/get_dns_id.cf'

PWD_DNS = PWD+'/dns_id.cf'

#读取获取DNS ID时返回的字符串,并且循环写入字典,以便于过滤出DNS ID

with open (PWD_GET,'r') as file:

    i = 0

    dict = {}

    for line in file:

        if line.strip  == " " or line == " " or line == " ":

            continue

        dict[i]=json.loads(line)

        i+=1

key_list = dict.keys()

for key in key_list:

    list =  dict[key]['result']

    #一个域名可能有多个DNS记录,cloudflare返回的是一个列表,列表中是一个一个的字典,

    #一个key-values代表一个DNS记录,所以这里需要遍历列表中的字典

    #通过取列表的索引值,循环每一个位置的字典

    for i in list:

        with open (PWD_DNS,'a+') as file:

            line = i['name'] + " " + i['id'] + " "

            file.writelines(line)

CloudFlare API:批量添加域名并添加解析记录

上一篇:2021年YouTube赚钱全攻略
下一篇:Supersonic深度分享4种打造超休闲游戏爆款原型核心


版权声明:以上主题为“CloudFlare API:批量添加域名并添加解析记录"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    CloudFlare API:批量添加域名并添加解析记录
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“CloudFlare API:批量添加域名并添加解析记录”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通CloudFlare API:批量添加域名并添加解析记录的相关事宜。

关键词:CloudFlare,API:批量添加域名

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号