首先声明,我的长短链使用的是 Url-Shorten-Worker,在很久前,我就好奇 Url-Shorten-Worker 这个 Github Repo 是怎么做到每天清理所有的 key:value 的,也没有认真去了解。
昨天 @Haukeng 疯狂调用我的长链接转短链接服务,为我的长短链注入了 1400+ 数据量,直到他的行为被 CloudFlare ban 掉(否则 1w+ 数据量)。也借着这次计划,我接触到了 CloudFlare 提供的 API,利用这些 API 可以进行批量操作行为。
文档相关
https://developers.cloudflare.com/workers/cli-wrangler/commands#kv
在本次操作中我们只关心上述文档中的 kv:key 的操作方式
可以看到右边的 TOC 很清晰的展示了几个操作:
| 操作 | 含义 |
|---|---|
| put | 往指定的 Namespace 中填充键值对 |
| list | 获取全部的 key |
| get | 获取某个 key 对应的 value |
| delete | 删除指定 key,及其 value |
这篇文章的核心思路是:
首先获取所有的
key查询所有
key对应的value判断对应的
value是否满足条件若
value满足条件,则请求删除对应的key
利用 Python 自动化
Python 对于写这种小工具来说真的太简单了,其思维也是极其容易理解。
环境
Ubuntu 20.04 WSL, based on Windows 10 20H2
Python 3.8.5
npm 6.14.12
wrangler 1.16.1
理论上,只要求本地安装了
Python >= 3.4,并且通过npm安装了wrangler即可。参考 wrangler install,其安装方式为
npm i @cloudflare/wrangler -g
如何自动化操作
在通过 Python 自动化操作中,主要使用到了 Python 原生自带的 subprocess、json 两个库。
subprocess 用于调用系统的 Shell,方便 Python 接入 wrangler API。如果不需要获得输出,或者不需要进行输入,利用
os库中的os.system("commands")也是一样的。subprocess 提供了标准的输入输出数据流,它可以很好的模拟我们需要在控制台交互的行为。CloudFlare API 通过
list查询后返回的数据是 JSON 格式的,因此需要使用 JSON 库来对其进行自动规范化,方便后面的数据处理
代码片段
代码主要分为三大部分:查询全部、查询对应的键值,以及删除满足条件的键
获取所有
key# Query keys withoud values
def get_all_keys(self) -> json:
keys = subprocess.Popen(f"wrangler kv:key list <YOUR-LOGIN-TOKEN>", shell=True, stdout=subprocess.PIPE, encoding='utf8').stdout
res = json.load(keys)
return res查询对应的键值
def get_values(self):
for key in keys:
# Get values with key querying
value = subprocess.Popen(f"wrangler kv:key get <YOUR-LOGIN-TOKEN> {key['name']}", shell=True, stdout=subprocess.PIPE, encoding='utf8').stdout.read()删除满足条件的键
if key in BAN_LIST:
op = subprocess.Popen(f"wrangler kv:key delete <YOUR-LOGIN-TOKEN> {key}", shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
op.stdin.write(bytes('y', encoding='utf8'))
op.stdin.flush()
完整代码
import subprocess |
Author: DioPong
Permalink: https://blog.2to.fun/post/technics/how-to-del-cloudflare-kv/
文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。
Comments