本文最后更新于 2022-07-20【644 天前】,文中所描述的信息可能已发生改变,请谨慎使用。如有问题或建议,欢迎在文章底部留言参与讨论!

本文介绍如何利用Curl或者Python,通过CloudFlare的API刷新托管站点的文件缓存。

非原创,但实践可行

准备

需要从CloudFlare获取托管站点的zoneid和账户的API KEYzoneid从站点管理页面的右侧边栏复制,API KEYProfile页面复制。下面是zoneidapi key的格式:

# 32位
zoneid: 023e105f4ecef8ad9ca31a8372d0c353
# 45位或37位
api key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41

使用

curl版本

files 列表支持指定刷新 url 时使用的 headers,不过通常用不到,直接传文件列表即可。curl 命令的格式如下:

curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/purge_cache" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"files":["http://www.example.com/css/styles.css",{"url":"http://www.example.com/cat_picture.jpg","headers":{"Origin":"cloudflare.com","CF-IPCountry":"US","CF-Device-Type":"desktop"}}]}'

Python 版本

#coding: utf-8
import requests
import argparse
import json

# your account email
EMAIL = 'user@example.com'
# your account api, get from the profile page
APIKEY = 'c2547eb745079dac9320b638f5e225cf483cc5cfdda41'

# zoneids of your sites
SITES = {
    'sitea': '31a8372d0c353023e105f4ecef8ad9ca',
    'siteb': '023e105f4ecef8ad9ca31a8372d0c353',
}

def main(siteid, files):
    zone = SITES[siteid]
    url = "https://api.cloudflare.com/client/v4/zones/%s/purge_cache" % (zone)
    headers = {
        'X-Auth-Email': EMAIL,
        'X-Auth-Key': APIKEY,
        'Content-Type': 'application/json'
    }
    res = requests.post(url, headers=headers, data='%s' % json.dumps({"files": files}), timeout=10)
    if res.status_code != 200:
        print(res.status_code)
    print(res.text)

if __name__ == '__main__':
    argParser = argparse.ArgumentParser()
    argParser.add_argument('-s', '--site', dest='site', type=str, help='site', required=True, choices=SITES.keys())
    argParser.add_argument('-f', '--files', dest='files', type=str, help='files', required=True)
    args = argParser.parse_args()
    # pass the urls with | separator
    main(args.site, args.files.split("|"))

如果成功,返回的内容是以下格式:

{"result":{"id":"efab1b41b12d5408927ab5b5ac2fd02b"},"success":true,"errors":[],"messages":[]}

参考资料

文章目录


推荐使用:阿里云 云翼计划学生优惠、ECS、轻量应用等产品与服务【 点击注册

本文作者:Quanyin Tang

本文链接:利用 API 清除 CloudFlare 上托管站点的文件缓存 - https://www.imtqy.com/cloudflare-api-clean-cache.html

版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 Quanyin 所有,未经允许禁止转载,经授权转载请注明出处!