阿里云,DNS(云解析),封装类

阿里云,DNS(云解析),封装类,第1张

安装二次开发库
# pip install aliyun-python-sdk-core
# pip install pyaliyunsdk
导入
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.acs_exception.exceptions import ClientException
类,成员变量
class CAliyunUtils:

    #私有类变量
    __aki = ""
    __aks = ""
    __domain = ""
    # rr = "@" # 可以为 @ www 等 二级域名
    # type = 'A' # 可以为 A MX CNAME 等
    # value = ""
    __client = None
    __request = None
    __response = None
初始化函数
    @classmethod
    def init(self, AccessKeyId,AccessKeySecret,domain):
        self.domain = domain
        self.aki = AccessKeyId
        self.aks = AccessKeySecret
        self.client = AcsClient(self.aki, self.aks, 'cn-hangzhou')
        self.request = CommonRequest()
        self.request.set_accept_format('json')
        self.request.set_domain('alidns.aliyuncs.com')
        self.request.set_method('POST')
        self.request.set_version('2015-01-09')
        self.request.add_query_param('DomainName',self.domain)
        #print(self.request)
增加一条解析记录
    @classmethod
    def act_addDomainRecord(self,rr,type,value):
        self.request.set_action_name('AddDomainRecord')
        self.request.add_query_param('RR', rr)
        self.request.add_query_param('Type',type)
        self.request.add_query_param('Value',value)

        try:
            self.response = self.client.do_action(self.request)
            return True
        except (ServerException, ClientException) as reason:
            print(reason.get_error_msg())
        return False
获得一条记录的RecordId
    @classmethod
    def act_getRecordId(self, rr_search, type):

        # 这里注意SubDomain的处理,比较特殊
        self.request.set_action_name('DescribeSubDomainRecords')
        self.request.add_query_param('SubDomain', rr_search+"."+self.domain)
        self.request.add_query_param('Type', type)
        self.request.add_query_param('DomainName',self.domain)

        try:
            self.response = self.client.do_action_with_exception(self.request)
            jsonObj = json.loads(self.response.decode("UTF-8"))
            #print(jsonObj)
            records = jsonObj["DomainRecords"]['Record']
            recordid = None
            for each in records:
                if each['RR'] == rr_search:
                    recordid = each['RecordId']
                    break
            return recordid
        except (ServerException, ClientException) as reason:
            print(reason.get_error_msg())

        return None
更新一条解析记录
    @classmethod
    def act_updateDomainRecord(self,rr,type,value):

        id_recorder = self.act_getRecordId(rr,type)
        if(id_recorder != None):

            self.request.set_action_name('UpdateDomainRecord')
            self.request.add_query_param('RecordId', id_recorder)
            self.request.add_query_param('RR', rr)
            self.request.add_query_param('Type',type)
            self.request.add_query_param('Value',value)

            try:
                self.response = self.client.do_action_with_exception(self.request)
                return True
            except (ServerException, ClientException) as reason:
                # 阿里云脑子有毛病吧,不存在的记录Update个屁啊,这叫什么异常
                if(reason.get_error_msg() == "The DNS record already exists."):
                    return True
                print(reason.get_error_msg())
            return False
用法
    a = CAliyunUtils()
    # 关于这里用到AccessKey和密码,在自己的阿里云账户里查
    a.init("Xsadjfoas","Sdsfsldf","xxx.com")
    a.act_getRecordId("@","A")
    a.act_updateDomainRecord("@","A",get_ip())
参考
# 阿里云,云解析的python文档
# https://next.api.aliyun.com/api-tools/sdk/Alidns?language=python

# 阿里云关于CommonRequest的调用
# https://help.aliyun.com/document_detail/61476.html

# 阿里云,修改解析记录文档
# https://help.aliyun.com/document_detail/29774.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/570631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存