又拍云(Upyun)CDN、云存储刷新链接缓存,API实例讲解

JSON 2019-07-20 19:55:00 7221

当页面内容发生了更新,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 的头部签名算法如下所示:

  1. 将需要刷新的文件 URL(以 http:// 开头) 以 \n 为间隔符连接
  2. 将第 1 步所得字符串、空间名、日期(GMT 格式)、经过 MD5 处理后的操作员密码用 &拼接
  3. 将第 2 步所得字符串进行 MD5 编码处理,所得记为 sign,
  4. 最后,将空间名,操作员名和第 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

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Upyun刷新CDN存储缓存 —JavaAPI
使用七牛存储实现图片API,自动删除图片方案合集
恭喜那个做存储的七牛完成 F 轮 10 亿人民币的融资,开启旅程
Redis缓存淘汰算法,LRU算法,LRU算法讲解
Java 集成阿里消息队列,日志消息存储
SOJSON 使用又 CDN 整体架构,解决百度 SEO 方案
Shiro + EHCache 缓存的使用。
MySQL存储引擎
个推异常值检测和实战应用-又
查询任意一个域名是否是阿里备案接入 API
最新文章
Linux I/O重定向 1768
Ruby 循环 - while、for、until、break、redo 和 retry 711
Node.js:全局对象 517
如何使用终端检查Linux上的内存使用情况 635
JavaScript对象详细剖析 300
Python print() 函数 409
PHP if/else/elseif 语句 407
HTML5 Canvas弧线教程 387
Java赋值运算符 431
XML内部实体和外部实体 464
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 686836
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 675081
免费天气API,天气JSON API,不限次数获取十五天的天气预报 615809
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 611126
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 555627
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 510028
Elasticsearch教程(四) elasticsearch head 插件安装和使用 481399
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 269208
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244787
Elasticsearch教程(一),全程直播(小白级别) 227490
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...