由于 Cloudflare 的控制台没有批量删除解析的功能,一条一条删很麻烦。不过我们可以通过 Cloudflare 的 API 功能来实现批量删除解析,准确地讲是全部删除,目前还不能实现删除指定的解析。

创建 API 令牌

打开 用户 API 令牌 页面,点击 创建令牌
652911f907881.png
然后点击 编辑区域 DNS 后的 使用模板 按钮。
652911fce31b4.png
接着在 特定区域 右侧的下拉列表列表中选择你需要批量删除解析的域名。
652912001ebf4.png
翻到网页底部,点击 继续以显示摘要
652912029d849.png
点击 创建令牌
652912054681d.png
复制虚线框内的令牌,保存备用。
65291208ddfd9.png

找到区域 ID

打开域名的概述页,下拉网页,在右下角找到 区域 ID
6529120bbbae9.png

执行批量删除

注意:脚本会删除指定域名的所有解析!

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

Windows

如果你使用 Windows 系统,请使用以下 PowerShell 脚本。(此脚本来自 Cloudflare 论坛
6529120f590a3.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$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
}

使用方法:

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

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

macOS / Linux / BSD / Termux

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)

使用方法:

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

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

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