前言
Cloudflare 是一家国外的 CDN 加速服务商,还是很有名气的。提供免费和付费的加速和网站保护服务。
分享一下使用 Python 通过 Cloudflare API 管理 Cloudflare 账户中的站点(批量添加、删除站点、修改站点域名解析记录等)。
下面有完整代码,直接Copy到新的 .py 文件,然后安装完python库就能跑了(≖ᴗ≖)✧。
需求
- Python 3.7 或者更高版本。
- Cloudflare Python库(github) 没有中文文档,只提供一个 api.md 文档。
当然,如果不想用Python库,也可以照着官方文档直接去使用他们的API。
Cloudflare API Documentation
我之前就是在他们官方文档上找到了对应api,然后用Postman一个个测试的。
但是到了开发的时候还是选择了直接使用Cloudflare库ヽ(ー_ー)ノ。
一、安装Python库
pip install cloudflare
二、开始使用
1.引入库
import asyncio
import cloudflare as cloudflareApi
from cloudflare import AsyncCloudflare
cloudflareApi 用于错误处理。
我在这里使用的是异步客户端 AsyncCloudflare。
同步客户端(Cloudflare)和异步客户端(AsyncCloudflare)之间的功能在其他方面是相同的。
2.初始化客户端
client = AsyncCloudflare(
api_email="你的账户邮箱",
api_key="你的API秘钥"
)
还有一个 api_token 参数。他的值就是在Cloudflare后台手动创建然后分配权限生成的API令牌。
使用api_token的话,上面两个就不需要了。但是你得确保你设置的令牌有对应操作的权限。
3.用法,代码全览
# -*- coding: utf-8 -*-
'''
@File : index.py
@Time : 2024/08/21 19:36:28
@Author : 妙啊这Sao操作
@Version : 1
@Desc : 使用cloudflare-python库对cloudflare账户中的站点进行管理。[cloudflare-python库api文档](https://github.com/cloudflare/cloudflare-python/blob/main/api.md#zones)
@Editor : Visual Studio Code
'''
import asyncio
import cloudflare as cloudflareApi
from cloudflare import AsyncCloudflare
# 还有一个 api_token 参数。他的值就是在Cloudflare后台手动创建然后分配权限生成的API令牌。
# 使用api_token的话,下面两个就不需要了。但是你得确保你设置的令牌有对应操作的权限。
client = AsyncCloudflare(
api_email="你的账户邮箱",
api_key="你的API秘钥"
)
async def cloudflare_account_list():
"""
获取cloudflare 账户列表
"""
accounts = await client.accounts.list()
# 因为Python库的响应是 Pydantic 模型。这里使用model_dump(mode='json')转成json数据
cloudflare_data = accounts.model_dump(mode='json')
print(f"===获取cloudflare 账户列表===>{
cloudflare_data}")
data_list = cloudflare_data.get('result')
return data_list[0].get('id')
async def cloudflare_website_list(pageNum, pageSize, name=''):
"""
获取cloudflare 站点列表
"""
try:
# 域名搜索内容可以是用','分隔的多个域名的字符串,最多不超过10个
zone = await client.zones.list(
page=pageNum,
per_page=pageSize,
name=name
)
cloudflare_data = zone.model_dump(mode='json')
print(f"===获取cloudflare 站点列表===>{
cloudflare_data}")
except cloudflareApi.APIStatusError as e:
print(f"===出错了code===>{
e.status_code}")
errors = e.body.get('errors')
print(f"===出错了message===>