Cloudflare 批量删除 DNS 解析

 尽管 Cloudflare 提供了一整套全面的 DNS 解析工具,但在其控制台中却遗憾地没有提供批量删除解析记录的功能。这意味着如果您想删除大量的记录,您需要手动一条一条地去删除,这无疑是一个繁琐且耗时的过程。

幸运的是,Cloudflare 的 API 提供了一种可以突破这一限制的解决方案。通过使用这些 API,我们可以实现批量删除解析记录的功能,大大节省用户的时间和精力。然而,值得注意的是,当前这些 API 主要支持的是全部删除解析记录。这就意味着,它会删除所有的解析记录,而不仅仅是您指定的那些。分步删除或只删除某几项指定的解析记录的功能目前还没有实现。


创建令牌

打开 用户 API 令牌 页面,点击 创建令牌 。

1

然后点击 编辑区域 DNS 后的 使用模板 按钮。

2

接着在 特定区域 右侧的下拉列表列表中选择你需要批量删除解析的域名。

3
点击 继续以显示摘要

4


5
请仔细确认这里的信息。然后点击创建令牌。
复制虚线框内的令牌,保存备用。

6

找到区域 ID

打开域名的概述页,下拉网页,在右下角找到 区域 ID。
7

执行批量删除

注意:脚本会删除指定域名的所有解析!脚本会删除指定域名的所有解析!脚本会删除指定域名的所有解析!
重要事情说3遍

请将以下的 <API TOKEN> 替换为你之前创建的 API 令牌,将 <ZONE ID> 替换为域名的区域 ID。

Windows

如果你使用 Windows 系统,请使用以下 PowerShell 脚本。

此脚本来自 Cloudflare 论坛:https://community.cloudflare.com/t/bulk-delete-dns-records/421686/2

$API_TOKEN = "<API TOKEN>"
$ZONE_ID = "<ZONE ID>"

$baseUrl = "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records"

$headers = @{
'Authorization' = "Bearer $API_TOKEN"
'Content-Type' = "application/json"
}

$listUrl = $baseUrl + '?per_page=500'
Write-Host $listUrl
$records = Invoke-RestMethod -Uri $listUrl -Method 'GET' -Headers $headers
$records = $records | Select-Object -ExpandProperty result

foreach ($record in $records) {
Write-Host "Deleting $($record.name) that points to $($record.content)"

$deleteUrl = $baseUrl + '/' + $record.id
Invoke-RestMethod -Uri $deleteUrl -Method 'DELETE' -Headers $headers
Write-Host $deleteUrl
}

复制上面的脚本,并保存为.ps1格式。

使用方法:

首先将脚本中的 <API TOKEN> 替换为你之前创建的 API 令牌,将 <ZONE ID> 替换为域名的区域 ID。

然后右键脚本,点击 使用 PowerShell 运行,等待执行完成即可。

8

macOS / Linux / Termux

如果你使用其他操作系统,请使用以下 Python 脚本。

import requests

API_TOKEN = "<API TOKEN>"
ZONE_ID = "<ZONE ID>"

baseUrl = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records"

headers = {
'Authorization': f'Bearer {API_TOKEN}',
'Content-Type': 'application/json'
}

listUrl = f"{baseUrl}?per_page=500"
print(listUrl)
response = requests.get(listUrl, headers=headers)
records = response.json()['result']

for record in records:
name = record['name']
content = record['content']

print(f"Deleting {name} that points to {content}")

deleteUrl = f"{baseUrl}/{record['id']}"
requests.delete(deleteUrl, headers=headers)
print(deleteUrl)

复制上面的代码,保存为.py文件。

使用方法:

首先安装 Python 环境和 requests 库(如果没有安装的话)。

然后将脚本中的 <API TOKEN> 替换为你之前创建的 API 令牌,将 <ZONE ID> 替换为域名的区域 ID。

在脚本目录打开终端,并执行命令 python3 cf-del-records.py,等待执行完成即可。


相关链接

Cloudflare官网:https://www.cloudflare.com

Cloudflare论坛:https://community.cloudflare.com






发表评论