likes
comments
collection
share

使用Python做一个腾讯域名添加解析脚本

作者站长头像
站长
· 阅读数 80

前言

爬虫后台工作暂时告一段落,因为后面都是搬砖的工作。今天想做一个对接云厂商API的例子,有利于日常开发工作,减少工作量,因为回想到之前做过一个有关域名自动切换的需求,其中要自动添加二级域名域名解析,申请证书,添加TXT类型域名解析,然后等待证书下发,下载证书,Git上传证书等等流程的工作,还有自动添加阿里云数据库白名单的需求,都用到了阿里云的API,这几天就来回顾总结一下把。

很不幸在阿里云上我的个人账户下都没有域名了,过期了都没有续费,所以转战腾讯云,腾讯云还有两个域名。

阅读文档

最简单地就是直接看Api Explorer 在线调试地址 console.cloud.tencent.com/api/explore…

找到想要的功能的方法看看先看看必选参数

使用Python做一个腾讯域名添加解析脚本

先看看要有几个必填项,看看代表的是什么的意思,可以看到添加解析记录的接口有四个必填参数

  • domain :域名
  • RecordType:记录类型,通过 API 记录类型获得,大写英文,比如:A,cname,text
  • RecordLine:记录线路,通过 API 记录线路获得,中文,比如:默认
  • Value:记录值,这里最常见的就是IP,还有text记录,或者CName,二级域名的等等

回顾需求

我在七牛云中需要申请一个免费的证书那就需要一个DNS验证

使用Python做一个腾讯域名添加解析脚本

使用Python做一个腾讯域名添加解析脚本 需要在域名的所在的DNS管理商那里添加一个CNAME的解析,记录值点击复制才能知道,不能直接显示哦。

确定参数内容

经过测试,除了必须参数还需要加一个SubDomain可选参数 , 这个非常重要是七牛云显示的记录名,但是要去掉后面主域名信息

  • domain 就是一级域名,不要什么www的在前面,是****.com这种。
  • RecordType 就是CNAME
  • RecordLine 使用默认线路,对就是默认
  • Value 一长串的记录值,七牛云给什么就是什么,不要增删了
  • SubDomain 腾讯解释的是二级域名前缀,七牛云这里就是记录名:_1F29BA69C53C61ABE869F447E8C7A17D.test

填在 Api Explorer 上看下实例代码:

import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.dnspod.v20210323 import dnspod_client, models
try:
    # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
    # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
    cred = credential.Credential("SecretId", "SecretKey")
    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "dnspod.tencentcloudapi.com"

    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = dnspod_client.DnspodClient(cred, "", clientProfile)

    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.CreateRecordRequest()
    params = {
        "Domain": "***.space",
        "RecordType": "CNAME",
        "RecordLine": "默认",
        "Value": "46376EA*********F42DA18233.FDB4A9E4FBF***E24D2A59E6.TTDtmStsn1.trust-provider.com",
        "SubDomain": "_1F29BA69C53C61ABE869F447E8C7A17D.test"
        
    }
    req.from_json_string(json.dumps(params))

    # 返回的resp是一个CreateRecordResponse的实例,与请求对象对应
    resp = client.CreateRecord(req)
    # 输出json格式的字符串回包
    print(resp.to_json_string())

except TencentCloudSDKException as err:
    print(err)

还需要安装腾讯云基于Python的SDK,这个SDK就是一个python包:

pip install tencentcloud-sdk-python

使用Python做一个腾讯域名添加解析脚本 点击运行看看日志

使用Python做一个腾讯域名添加解析脚本 完美完成需求,然后回到域名解析的控制台验证:

使用Python做一个腾讯域名添加解析脚本 成功!!!

做一个简单的封装

import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.dnspod.v20210323 import dnspod_client, models


def set_dns(domain, record_type, value, sub_domain):
    try:
        # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
        # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
        cred = credential.Credential("*******************", "********************")
        # 实例化一个http选项,可选的,没有特殊需求可以跳过
        httpProfile = HttpProfile()
        httpProfile.endpoint = "dnspod.tencentcloudapi.com"

        # 实例化一个client选项,可选的,没有特殊需求可以跳过
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        # 实例化要请求产品的client对象,clientProfile是可选的
        client = dnspod_client.DnspodClient(cred, "", clientProfile)

        # 实例化一个请求对象,每个接口都会对应一个request对象
        req = models.CreateRecordRequest()
        params = {
            "Domain": domain,
            "RecordType": record_type,
            "RecordLine": "默认",
            "Value": value,
            "SubDomain": sub_domain
        }
        req.from_json_string(json.dumps(params))

        # 返回的resp是一个CreateRecordResponse的实例,与请求对象对应
        resp = client.CreateRecord(req)
        # 输出json格式的字符串回包
        print(resp.to_json_string())
        return True
    except TencentCloudSDKException as err:
        print(err)
        return False

在同级文件夹下其他脚本文件调用:

from tencent_domain import set_dns

if __name__ == '__main__':
    if set_dns('*****.space','CNAME','46376EACF0E*****18233.FDB4A9E4FBF08******3D2E24D2A59E6.TTDtmStsn1.trust-provider.com','_1F29BA69C53C61ABE869F447E8C7A17D.test'):
        print('设置成功')
    else:
        print('设置失败')

现在就可以直接调用了,简单可靠。

总结

腾讯的相对来说比我之前的用得阿里云的接口要好很多,一下子就调试好了阿里云的调试出来的代码好像是异步的,而且SDK相对混乱,虽然其他教程也很多,但是想找到一个靠谱的非常困难,接下来做一下七牛云的接口解析,进行轮询,然后下载证书。

转载自:https://juejin.cn/post/7129521181211754503
评论
请登录