文件最后提交记录最后更新时间
2 年前
2 年前
2 年前
README

1. 示例简介

CDN(Content Delivery Network,内容分发网络)。CDN是构建在现有互联网基础之上的一层智能虚拟网络,通过在网络各处部署节点服务器,实现将源站内容分发至所有CDN节点,使用户可以就近获得所需的内容。CDN服务缩短了用户查看内容的访问延迟,提高了用户访问网站的响应速度与网站的可用性,解决了网络带宽小、用户访问量大、网点分布不均等问题。 本示例指导用户设置、查询和删除域名下的IP黑白名单信息以及设置、查询业务类型和设置、查询IPV6信息。

2. 开发前准备

  • 注册 华为云,并完成 实名认证
  • 具备开发环境 ,支持python3.3及以上版本。可执行 python --version 检查当前 python 的版本信息。
  • CDN服务软件开发工具包(CDN SDK,Content Delivery Network Software Development Kit)是对CDN服务提供的REST API进行的封装,获取华为云CDN开发工具包(SDK) ,SDK的使用方法请参见CDN SDK

3. 安装SDK

内容分发网络服务端SDK支持支持python3.3及其以上版本。

使用服务端SDK前,您需要安装“huaweicloudsdkcore ”和 “huaweicloudsdkcdn”,具体的SDK版本号请参见 SDK开发中心

安装cdn服务包

pip install huaweicloudsdkcdn

安装sdk核心包

pip install huaweicloudsdkcore

4. 代码示例

4.1 导入依赖模块

import json
import os
from huaweicloudsdkcdn.v2.cdn_client import CdnClient
from huaweicloudsdkcdn.v2.model.configs import Configs
from huaweicloudsdkcdn.v2.model.ip_filter import IpFilter
from huaweicloudsdkcdn.v2.model.modify_domain_config_request_body import ModifyDomainConfigRequestBody
from huaweicloudsdkcdn.v2.model.show_domain_full_config_request import ShowDomainFullConfigRequest
from huaweicloudsdkcdn.v2.model.update_domain_full_config_request import UpdateDomainFullConfigRequest
from huaweicloudsdkcore.auth.credentials import GlobalCredentials
from huaweicloudsdkcore.exceptions.exceptions import ConnectionException
from huaweicloudsdkcore.exceptions.exceptions import RequestTimeoutException
from huaweicloudsdkcore.exceptions.exceptions import ServiceResponseException
from huaweicloudsdkcore.region.region import Region

4.2 初始化认证信息, 及客户端

示例相关参数说明如下所示:

  • ak:华为云账号Access Key。
  • sk:华为云账号Secret Access Key。
  • iam_endpoint:iam身份认证域名。
  • endpoint:接口调用域名。
  • domain_name:需要查询的域名。
  • region: 服务所在区域。
  • ip_type: IP黑白名单类型,off:关闭IP黑白名单,black:IP黑名单,white:IP白名单。
  • ip_value: 配置IP黑白名单,当type=off时,非必传, 支持IPv6,支持配置IP地址和IP&掩码格式的网段, 多条规则用“,”分割,最多支持配置150个, 多个完全重复的IP/IP段将合并为一个,不支持带通配符的地址,如192.168.0.*参考
  • business_type: 业务类型: web:网站加速,download:文件下载加速,video:点播加速。
  • ipv6_accelerate: ipv6设置,1:打开;0:关闭。
    @staticmethod
    def main(args):
        # 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
        # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
        ak = os.environ["HUAWEICLOUD_SDK_AK"]
        sk = os.environ["HUAWEICLOUD_SDK_SK"]
        iam_endpoint = "<iam endpoint>"
        endpoint = "<endpoint>"
        domain_name = "your query name"
        region = "cn-north-1"
        ip_type = "black"
        ip_value = "you ip"
        business_type = "you type"
        ipv6_accelerate = 0
        auth = GlobalCredentials(ak, sk) \
            .with_iam_endpoint(iam_endpoint)
        client = CdnClient.new_builder() \
            .with_credentials(credentials=auth) \
            .with_region(region=Region(id=region, endpoint=endpoint)) \
            .build()
        set_ip_filter = IpFilter()
        set_ip_filter.type = ip_type
        set_ip_filter.value = ip_value
        set_ip_filter_response = DomainFullConfig.set_ip_filter_config(client, domain_name, set_ip_filter)
        print(set_ip_filter_response)
        get_ip_filter_response = DomainFullConfig.get_ip_filter_config(client, domain_name)
        print(get_ip_filter_response)
        delete_ip_filter = IpFilter()
        delete_ip_filter.type = ip_type
        delete_ip_filter_response = DomainFullConfig.delete_ip_filter_config(client, domain_name, delete_ip_filter)
        print(delete_ip_filter_response)
        set_business_type_response = DomainFullConfig.set_business_type_config(client, domain_name, business_type)
        print(set_business_type_response)
        get_business_type_response = DomainFullConfig.get_business_type_config(client, domain_name)
        print(get_business_type_response)
        set_ipv6_response = DomainFullConfig.set_ipv6_config(client, domain_name, ipv6_accelerate)
        print(set_ipv6_response)
        get_ipv6_config_response = DomainFullConfig.get_ipv6_config(client, domain_name)
        print(get_ipv6_config_response)

4.2.1 设置IP黑白名单方法

示例相关参数说明如下所示:

  • client:客户端。
  • domain_name:操作域名。
  • ip_filter:ip黑白名单,详情参考IpFilter。
    @staticmethod
    def set_ip_filter_config(client, domain_name, ip_filter):
        request = UpdateDomainFullConfigRequest()
        body = ModifyDomainConfigRequestBody()
        configs = Configs()
        configs.ip_filter = ip_filter
        body.configs = configs
        request.body = body
        request.domain_name = domain_name
        result = ""
        try:
            response = client.update_domain_full_config(request)
            result_code = response.status_code
            if result_code == 204:
                return "set ip filter success"
        except ConnectionException:
            print("setIpFilterConfig ConnectionException")
        except RequestTimeoutException:
            print("setIpFilterConfig RequestTimeoutException")
        except ServiceResponseException as e:
            print("ServiceResponseException RequestTimeoutException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

4.2.2 查询P黑白名单设置结果方法

    @staticmethod
    def get_ip_filter_config(client, domain_name):
        request = ShowDomainFullConfigRequest()
        request.domain_name = domain_name
        result = ""
        try:
            response = client.show_domain_full_config(request)
            result = json.dumps(str(response.configs.ip_filter))
        except ConnectionException:
            print("getIpFilterConfig ConnectionException")
        except RequestTimeoutException:
            print("getIpFilterConfig RequestTimeoutException")
        except ServiceResponseException as e:
            print("getIpFilterConfig ServiceResponseException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

4.2.3 删除IP黑白名单设置结果

示例相关参数说明如下所示:

  • client:客户端。
  • domain_name:操作域名。
  • ip_filter:ip黑白名单,详情参考IpFilter。
    @staticmethod
    def delete_ip_filter_config(client, domain_name, ip_filter):
        request = UpdateDomainFullConfigRequest()
        filter_body = ModifyDomainConfigRequestBody()
        filter_config = Configs()
        filter_config.ip_filter = ip_filter
        filter_body.configs = filter_config
        request.body = filter_body
        request.domain_name = domain_name
        result = ""
        try:
            response = client.update_domain_full_config(request)
            result_code = response.http_status_code
            if result_code == 204:
                return "delete ip filter success"
        except ConnectionException:
            print("deleteIpFilterConfig ConnectionException")
        except RequestTimeoutException:
            print("deleteIpFilterConfig RequestTimeoutException")
        except ServiceResponseException as e:
            print("deleteIpFilterConfig ServiceResponseException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

4.3.1 设置业务类型方法

示例相关参数说明如下所示:

  • client:客户端。
  • domain_name:操作域名。
  • business_type:业务类型,详情参考business_type。
    @staticmethod
    def set_business_type_config(client, domain_name, business_type):
        request = UpdateDomainFullConfigRequest()
        body = ModifyDomainConfigRequestBody()
        configs = Configs()
        configs.business_type = business_type
        request.domain_name = domain_name
        body.configs = configs
        request.body = body
        result = ""
        try:
            response = client.update_domain_full_config(request)
            result_code = response.status_code
            if result_code == 204:
                return "set business type success"
        except ConnectionException:
            print("setBusinessTypeConfig ConnectionException")
        except RequestTimeoutException:
            print("setBusinessTypeConfig RequestTimeoutException")
        except ServiceResponseException as e:
            print("setBusinessTypeConfig ServiceResponseException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

4.3.2 查询业务类型方法

    @staticmethod
    def get_business_type_config(client, domain_name):
        request = ShowDomainFullConfigRequest()
        request.domain_name = domain_name
        result = ""
        try:
            response = client.show_domain_full_config(request)
            result = response.configs.business_type
        except ConnectionException:
            print("getBusinessTypeConfig ConnectionException")
        except RequestTimeoutException:
            print("getBusinessTypeConfig RequestTimeoutException")
        except ServiceResponseException as e:
            print("getBusinessTypeConfig ServiceResponseException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

4.4.1 设置IPV6开关方法

示例相关参数说明如下所示:

  • client:客户端。
  • domain_name:操作域名。
  • ipv6_accelerate:ipv6设置,详情参考ipv6_accelerate。
    @staticmethod
    def set_ipv6_config(client, domain_name, ipv6_accelerate):
        request = UpdateDomainFullConfigRequest()
        body = ModifyDomainConfigRequestBody()
        configs = Configs()
        configs.ipv6_accelerate = ipv6_accelerate
        request.domain_name = domain_name
        body.configs = configs
        request.body = body
        result = ""
        try:
            response = client.update_domain_full_config(request)
            result_code = response.status_code
            if result_code == 204:
                return "set ipv6 success"
        except ConnectionException:
            print("setIpv6Config ConnectionException")
        except RequestTimeoutException:
            print("setIpv6Config RequestTimeoutException")
        except ServiceResponseException as e:
            print("setIpv6Config ServiceResponseException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

4.5.2 查询IPV6开关方法

    @staticmethod
    def get_ipv6_config(client, domain_name):
        request = ShowDomainFullConfigRequest()
        request.domain_name = domain_name
        result = ""
        try:
            response = client.show_domain_full_config(request)
            status = response.configs.ipv6_accelerate
            if status is not None:
                result = "开启ipv6" if status == 1 else "关闭ipv6"
        except ConnectionException:
            print("getIpv6Config ConnectionException")
        except RequestTimeoutException:
            print("getIpv6Config RequestTimeoutException")
        except ServiceResponseException as e:
            print("getIpv6Config ServiceResponseException")
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
        return result

5. 参考

用户可以根据IP黑白名单、IPV6设置和业务类型设置的传参模型,举一反三设置其他配置信息,域名配置文档参考。 更多信息请参考 内容分发网络CDN文档

6. 修订记录

发布日期 文档版本 修订说明
2023-08-28 1.0 文档首次发布