本篇文章将讲述如何使用Python调用华为云API刷新CDN缓存,免去登录后台步骤的同时也能更方便的与其他业务进行结合。该API也支持使用Java、Go、C#、JavaScript、PHP、C++、C、Android、curl调用。(毕竟本质上就是HTTP请求)
为了能够正常运行,需要准备以下内容:
- Python环境(官网下载)
- requests(
pip install requests
)
我们首先要为API网关创建一个访问密钥,登录华为云控制台,鼠标放在右上角用户名的地方,在弹出的窗口中点击“我的凭证”,如图:
在弹出页面中点击访问密钥,新增一个访问密钥,具体操作流程如图所示:
创建成功后点击“立即下载”
会自动下载一个csv
文件,里面有用户名(User Name)、访问密钥ID(Access Key Id)和访问密钥(Secret Access Key),我们需要将访问密钥ID和访问密钥加入到环境变量中。下面记录两种系统(Windows、Linux)的具体操作步骤。
Windows:
- 按
Win + I
组合键打开系统设置,点击系统 – 系统信息 – 高级设置 – 环境变量,在系统变量处点击新建,一共需要新建两组,内容如下:
第一组:
变量名:HUAWEICLOUD_SDK_AK
变量值:刚刚下载的访问密钥文件中的Access Key Id的值
第二组:
变量名:HUAWEICLOUD_SDK_SK
变量值:刚刚下载的访问密钥文件中的Secret Access Key的值
- 然后依次点击确定保存。
Linux:
- 在终端输入
nano ~/.bashrc
,加入以下内容:
export HUAWEICLOUD_SDK_AK="刚刚下载的访问密钥文件中的Access Key Id的值"
export HUAWEICLOUD_SDK_SK="刚刚下载的访问密钥文件中的Secret Access Key的值"
- 保存退出,执行
source ~/.bashrc
使修改生效。
然后我们需要准备一份SDK,到华为云文档中的API网关 APIG章节下载一份Python的SDK
下载完成后解压,使用代码编辑器打开,如图,我们主要修改main.py
中的13 – 16行,并导入一个json
模块
在第5行添加:
import json
将14行的地址修改为:
https://cdn.myhuaweicloud.com/v1.0/cdn/content/refresh-tasks
注:地址可在华为云文档创建刷新缓存任务章节的在线调试中找到
删除16行的"body"
和15行末尾的,
;并添加以下内容:
r.body = json.dumps({
"refresh_task": {
"type": "directory",
"mode": "all",
"zh_url_encode": False,
"urls": [
"要刷新的URL"
]
}
}).encode('utf-8') # 编码为字节
参数解读:
type
: 刷新的类型,其值可以为file
:文件,或directory
:目录,默认为file
。mode
: 目录刷新方式,all
:刷新目录下全部资源;detect_modify_refresh
:刷新目录下已变更的资源,默认值为all
。zh_url_encode
: 是否对url中的中文字符进行编码后刷新,false
代表不开启,true
代表开启,开启后仅刷新转码后的URL。urls
: 需要刷新的URL必须带有“http://”
或“https://”
,多个URL用逗号
分隔("url1", "url2")
,单个url的长度限制为4096字符,单次最多输入1000个url,如果输入的是目录,支持100个目录刷新。
如果您需要刷新的URL中有中文,请同时刷新中文URL(输入中文URL且不开启zh_url_encode)和转码后的URL(输入中文URL且开启zh_url_encode)。
如果您的URL中带有空格,请自行转码后输入,且不要开启URL Encode。
修改后的代码如下:
# coding=utf-8
import os
import requests
from apig_sdk import signer
import json # 添加json
if __name__ == '__main__':
sig = signer.Signer()
# 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
# 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
sig.Key = os.getenv('HUAWEICLOUD_SDK_AK')
sig.Secret = os.getenv('HUAWEICLOUD_SDK_SK')
r = signer.HttpRequest("POST",
"https://cdn.myhuaweicloud.com/v1.0/cdn/content/refresh-tasks",
{"x-stage": "RELEASE"})
r.body = json.dumps({
"refresh_task": {
"type": "directory",
"mode": "all",
"zh_url_encode": False,
"urls": [
"" # 请替换为实际的URL
]
}
}).encode('utf-8') # 编码为字节
sig.Sign(r)
print(r.headers["X-Sdk-Date"])
print(r.headers["Authorization"])
resp = requests.request(r.method, r.scheme + "://" + r.host + r.uri, headers=r.headers, data=r.body)
print(resp.status_code, resp.reason)
print(resp.content)
我们可以执行以下看看效果:
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
Eric · 梦曦
本文地址: 华为云 | 优雅地刷新CDN缓存
本文地址: 华为云 | 优雅地刷新CDN缓存