又拍云(Upyun)刷新CDN,云存储缓存 —JavaAPI

soゝso 2018-01-22 22:52:33 4038

最近在使用又拍云,今天搞这个缓存刷新搞了一会,是我的粗心导致,下面就说下这个刷新 URL API吧,

已经咨询过客服,已弃用的意思是不再维护了,还可以用。也确认了,刷新只有这一个 API。要不只有手动刷新了。

登陆  又拍云  后,手动刷新链接地址:https://console.upyun.com/purge/purge_url/


具体操作自己琢磨,没难度。下面看看官方描述的 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>
  1. 将需要刷新的文件 URL(以 http:// 开头) 以 \n 为间隔符连接
  2. 将第 1 步所得字符串、空间名、日期(GMT 格式)、经过 MD5 处理后的操作员密码用 & 拼接
  3. 将第 2 步所得字符串进行 MD5 编码处理,所得记为 sign,
  4. 最后,将空间名,操作员名和第 3 步所得的 sign 以如下格式作为请求头参数传递:
Authorization: UpYun <bucket-name>:<operator-name>:<sign>

响应状态

状态码说明
200json 格式的字符串{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 限制

那下面我们来尝试下   Java   使用这个刷新 API

Java 操作又拍云刷新 URL

直接上代码了,这里要说明几个包,Http 是我自己封装的,还不成熟,暂时不对外开放。你直接用你自己的   http   请求,或者用 HttpPost 也可以,待会都会讲到。


import com.google.gson.Gson;
import com.sojson.common.utils.Http;
import org.apache.commons.lang.StringUtils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 *
 * UpYun 操作方法合集
 *
 *
 */
public class UpyunCDNUtils {


    /**
     * 缓存刷新
     * @param urls
     */
    public static void refresh(String ...urls){


        String bucket = "空间名";
        String password = "明文密码";
        String userName = "操作员";
        //GMT 格式的 date
        String gmt = getGMTDate();

        //把 url 数组,以 \n 间隔
        String urlParms = StringUtils.join(urls, "\n");

        //拼接签名sign
        String sign = md5(new StringBuffer(urlParms)
        .append("&").append(bucket)
        .append("&").append(gmt)
        .append("&").append(md5(password)).toString());
        //构建 Authorization
        String auth = new StringBuffer("UpYun ")
                .append(bucket).append(":")
                .append(userName).append(":")
                .append(sign).toString();

        //Authorization格式:UpYun <bucket-name>:<operator-name>:<sign>
        Http http = Http.create("http://purge.upyun.com/purge/");
        http.head("Expect","");
        http.head("Date",gmt);
        http.head("Authorization",auth);

        http.body("purge", urlParms);

        Http result = http.post()//post 请求
                .requestCount(3)//重试3次
                .timeout(1)//10秒超时,因为这个接口会经常超时
                .send();//发送请求
        //正常返回会返回{"invalid_domain_of_url":{}} ,并且 httpcode "status":200
        System.out.println(new Gson().toJson(result.getResponse()));
    }

    public static void main(String[] args) {
        refresh("https://www.sojson.com");
    }



    /**
     *  字符串 MD5加密
     * @param str
     * @return
     */
    public static String md5(String str) {
        String result = "";
        byte[] temp = null;
        MessageDigest md5 = null;

        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        try {
            temp = md5.digest(str.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }


        for (int i = 0; i < temp.length; i++) {
            result += Integer.toHexString((0x000000ff & temp[i]) | 0xffffff00).substring(6);
        }
        return result;
    }
    /**
     * 获取 GMT 格式时间戳
     * @return
     */
    private static  String getGMTDate() {
        SimpleDateFormat df = new SimpleDateFormat(
                "E, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        return df.format(new Date());
    }
}

关键点就是拼接 Sign 的时候。

下面也给出一个完整的 Demo 链接:https://github.com/lvtongda/java-purge-sdk

如果还是不行,请与我交流。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/270.html

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

本文主题:

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

关于作者
一个低调而闷骚的男人。
相关文章
UpyunCDN存储刷新链接缓存,API实例讲解
Java 集成阿里消息队列,日志消息存储
SOJSON 使用又 CDN 整体架构,解决百度 SEO 方案
Shiro + EHCache 缓存的使用。
Redis缓存淘汰算法,LRU算法,LRU算法讲解。
阿里和腾讯哪个好?
SpringBoot 集成Spring-data-redis,redis对象序列化存储
24小时日志下载方法,日志合并,.gz 压缩包多个合并方法
腾讯代金券 10000 元/ 30000 代金券领取技巧
阿里双11活动购买详细说明,阿里最低86元起一年服务器购买详情
最新文章
使用七牛云存储实现图片API,自动删除图片方案合集 372
神速ICP备案经验分享,ICP备案居然一天就通过了 1607
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 2648
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 2865
湖南地区备案“新增网站需提交组网方案或解释说明”,关于备案做简单叙述 2803
企查查你是个什么企业,骗子的帮凶,诈骗的集中营,通过企查查骚扰企业电话不断,为所欲为的企查查 8845
Java爬取百度云观测对网站的检测数据,获取子域名及域名的安全信息 2351
【2020年】百度搜索词获取,获取百度搜索的关键词【真实有效】 6254
Nodejs环境安装,Nodejs环境安装一篇就够了 1609
iOS版淘宝打开提示“您使用的程序是内测版本,将于2020-03-28到期,到期将无法使用,请尽快下载最新版本” 2388
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 422860
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 413913
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 346874
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 298331
免费天气API,天气JSON API,不限次数获取十五天的天气预报 278330
Elasticsearch教程(四) elasticsearch head 插件安装和使用 216098
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 167659
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 133638
Elasticsearch教程(一),全程直播(小白级别) 117007
Elasticsearch教程(五) elasticsearch Mapping的创建 97439

骚码加入我们 / 千人QQ群:259217951

入群需要5元为的是没有垃圾广告,如果没有QQ钱包,可以加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

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

查看我的收藏

正在加载... ...