又拍云(Upyun)CDN、云存储刷新链接缓存,API实例讲解
当页面内容发生了更新,CDN需要刷新缓存才能看到更新的内容,本站使用的是又拍云(upyun)做CDN及云存储,看过几次API,没怎么看懂所以一直手动刷新,这次尝试了下调用又拍云API刷新,测试成功后分享下。
又拍云刷新API文档说明
当源站的资源发生变更后,可以调用该 API 接口告知又拍云刷新缓存,缓存更新后,用户访问时会获取到更新后的资源。
特别地,使用又拍云存储会在资源变更后,自动刷新缓存,省去使用自主源站缓存刷新这一步。
API地址:
http://purge.upyun.com/purge/
请求说明:
curl -X POST \
http://purge.upyun.com/purge/ \
-H "Authorization: <your_authorization>" \
-H "Date: <date>" \
-F purge=<url-list>
Authorization 算法:
其中,请求头部的 Authorization
的头部签名算法如下所示:
- 将需要刷新的文件 URL(以 http:// 开头) 以 \n 为间隔符连接
- 将第 1 步所得字符串、空间名、日期(GMT 格式)、经过 MD5 处理后的操作员密码用 &拼接
- 将第 2 步所得字符串进行 MD5 编码处理,所得记为 sign,
- 最后,将空间名,操作员名和第 3 步所得的 sign 以如下格式作为请求头参数传递:Authorization: UpYun ::
另外,需将待刷新的 URL 列表在以换行符 \n
连接后以表单字段 purge
随请求发送。
上面是又拍云的描述,我的感觉就是这个接口比较简单,但是 Authorization
算法有点不清不楚,那下面我用Java代码来实现一遍,其他语言结合代码中的注释做调整。
缓存刷新Java实现代码
/**
* 刷新缓存
* @param filePath 需要刷新的URL链接数组
*/
public void flush(String[] filePath){
//date GMT 格式
String date = getGMTDate();
//需要刷新的URL,以 \n 间隔
String urls = String.join("\n", filePath);
//空间名称 CDN或者云存储 --> 域名管理 的 服务名称
String bucketName = "空间名称";
//操作员名称: CDN或者云存储 --> 功能配置 --> 回源管理:最下面有操作员
String operator = "操作员名称";
//对应操作员的密码
String password = "操作员的密码";
//拼接签名参数,以"&"间隔
String signStr = String.format("%s&%s&%s&%s",urls,bucketName,date,MathUtil.getMD5(password));
String sign = String.format("UpYun %s:%s:%s",
bucketName,
operator,
MathUtil.getMD5(signStr));
Http http = Http.create("http://purge.upyun.com/purge/")
//签名
.head("Authorization", sign)
//GMT格式时间,和签名里是一致的
.head("Date", date)
//需要刷新的URL,和签名里是一致的
.body("purge", urls)
//POST请求
.post()
.send();
//输出返回
System.out.println(http.getResponse().getResult());
}
备注:
md5请替换成您的 MD5 方法。
Http 工具类是我自己封装的,您自己用其他的 Http 请求,只要注意一个 Authorization
和 GMT
格式的date。purge
是以“\n”
间隔的URL
地址。
接口状态返回值
状态码 | 说明 |
---|---|
200 | json 格式的字符串{invalid_domain_of_url:不属于自己域名的 url 列表} |
401 | 无认证头部信息(Authorization)(提示信息:Need Authorization Header) |
401 | 无认证头部信息(Date)(提示信息:Need Date Header) |
401 | 操作员不存在(提示信息:User is not exists) |
401 | 空间名不存在(提示信息:Bucket is not exists) |
401 | 请求时间超出 30 分钟(提示信息:Date offset error) |
401 | 签名错误(提示信息:Sign error) |
406 | 每分钟刷新 URL 个数超过 600 限制 |
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/338.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。