CdnClient

CdnClient是CDN服务的客户端,为开发者与CDN服务进行交互提供了一系列的方法。

新建CdnClient

通过AK/SK方式访问CDN

通过AK/SK方式访问CDN,用户可以参考如下代码新建一个CdnClient:

public class Sample {
public static void main(String[] args) {
    String endPoint = "http://cdn.baidubce.com";                     // CDN服务端接口地址
    String accessKeyId = “1f46192b-1365-11e7-9b89-6c40088dcee6”;     // 用户的Access Key ID
    String secretAccessKy = “258ddd5c-1365-11e7-a459-6c40088dcee6”;  // 用户的Secret Access Key
    BceClientConfiguration config = new BceClientConfiguration()
                .withCredentials(new DefaultBceCredentials(accessKeyId, secretAccessKy))
                .withEndpoint(endPoint);
    CdnClient cdnClient = new CdnClient(config);
}

在上面代码中,变量accessKeyId与secretAccessKy是由系统分配给用户的,均为字符串,用于标识用户,为访问CDN做签名验证。其中accessKeyId对应控制台中的“Access Key ID”,secretAccessKy对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 管理ACCESSKEY》。

新建加速域名

如下代码可以新建一个加速域名:

public void testCreateDomain(CdnClient client) {
    String domainName = “my.test.com”;
    ArrayList<OriginPeer> origin = new ArrayList<OriginPeer>();
    origin.add(new OriginPeer().withPeer("1.2.3.4"));  // 添加源站 1.2.3.4
    origin.add(new OriginPeer().withPeer("2.3.4.5"));  // 添加源站 2.3.4.5
    CreateDomainRequest request = new CreateDomainRequest()
                .withDomain(domainName)
                .withOrigin(origin);
    CreateDomainResponse response = client.createDomain(request);
    System.out.println(response.getCname());  // 创建成功,获取对应的CNAME
}

注意:由于加速域名在所有区域中是唯一的,所以需要保证domain不与其他所有区域上的加速域名名称相同

查看加速域名列表

如下代码可以列出用户所有的域名:

public void listDomains (CdnClient client) {
    // 获取用户的加速域名列表
    List<Domain> domains = client.listDomains().getDomains();
    // 遍历加速域名
    for (Domain domain : domains) {
        System.out.println(domain.getName());
    }
}

删除加速域名

如下代码可以删除一个加速域名:

public void deleteDomain (CdnClient client, String domainName) {
    client.deleteDomain(domainName); 
}

加速域名配置

设置回源地址

public void setDomainOrigin(CdnClient client, String domainName) {
    String hostAddress = “origin.my.com”; // 源站地址
    String hostName = “my.com”; // 回源Host,不配置则默认使用加速域名

    List<OriginPeer> origin = new ArrayList<OriginPeer>();
    origin.add(new OriginPeer().withPeer(hostAddress).withHost(hostName));
    SetDomainOriginRequest request = new SetDomainOriginRequest()
            .withDomain(domainName)
            .withOrigin(origin);
    client.setDomainOrigin(request);
}

设置缓存策略

public void setDomainCacheTTL(CdnClient client, String domainName) {
    SetDomainCacheTTLRequest request = new SetDomainCacheTTLRequest()
            .withDomain(DOMAIN)
            .addCacheTTL(new CacheTTL().withType("suffix").withValue(".jpg").withTtl(3600)) // .jpg后缀缓存一小时
            .addCacheTTL(new CacheTTL().withType("suffix").withValue(".png").withTtl(3600)) // .png后缀缓存一小时
            .addCacheTTL(new CacheTTL().withType("path").withValue("/").withTtl(86400));    // 根目录缓存一天
    client.setDomainCacheTTL(request);
}

设置全url缓存

public void setDomainCacheFullUrl(CdnClient client, String domainName) {
    client.setDomainCacheFullUrl(domainName, true);
}

设置访问Referer控制

public void setDomainRefererACL(CdnClient client, String domainName) {
    RefererACL acl = new RefererACL()
            .addBlackList("http://a.com")
            .addBlackList("http://b.com");
    SetDomainRefererACLRequest request = new SetDomainRefererACLRequest()
            .withDomain(DOMAIN)
            .withRefererACL(acl);
    cdnClient.setDomainRefererACL(request);
}

设置访问Ip控制

public void setDomainIpACL(CdnClient client, String domainName) {
    IpACL acl = new IpACL()
            .addBlackList("1.2.3.4")
            .addBlackList("5.6.7.0/24");
    SetDomainIpACLRequest request = new SetDomainIpACLRequest()
           .withDomain(domainName)
           .withIpACL(acl);
    client.setDomainIpACL(request);
}

缓存管理

刷新缓存

public void purgeUrl(CdnClient client, String domainName) {
    PurgeRequest request = new PurgeRequest()
            .addTask(new PurgeTask().withUrl(“http://“ + domainName + “/url”))
            .addTask(new PurgeTask().withDirectory("http://" + domainName + "/directory/"));
    PurgeResponse purgeResponse = client.purge(request);
    System.out.println(purgeResponse);
    // 根据任务id查询刷新结果
    GetPurgeStatusResponse purgeStatusResponse = client.getPurgeStatus(
             new GetPurgeStatusRequest().withId(purgeResponse.getId()));
    System.out.println(purgeStatusResponse);
}

预热缓存

public void prefetchUrl(CdnClient client, String domainName) {
    PrefetchRequest request = new PrefetchRequest()
            .addTask(new PrefetchTask().withUrl(“http://“ + domainName + “/url”));
    PrefetchResponse prefetchResponse = client.prefetch(request);
    System.out.println(prefetchResponse);
    // 根据任务id查询预热结果
    GetPrefetchStatusResponse prefetchStatusResponse = client.getPrefetchStatus(
             new GetPrefetchStatusRequest().withId(prefetchResponse.getId()));
    System.out.println(prefetchStatusResponse);
}

统计与日志接口

查询域名pv

public void getDomainPv(CdnClient client, String domainName) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    GetStatPvRequest request = new GetStatPvRequest()
            .withDomain(domainName)
            .withStartTime(sdf.parse("2017-03-10 10:00"))
            .withEndTime(sdf.parse("2017-03-11 10:00"));
    GetStatPvResponse response = client.getStatPv(request);
    System.out.println(response);
}

注意: 当不指定domainName的时候,查询返回的结果为用户所有加速域名的pv统计之和

查询域名流量

public void getDomainFlow(CdnClient client, String domainName) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    GetStatFlowRequest request = new GetStatFlowRequest()
            .withDomain(domainName)
            .withStartTime(sdf.parse("2017-03-10 10:00"))
            .withEndTime(sdf.parse("2017-03-11 10:00"));
    GetStatFlowResponse response = client.getStatFlow(request);
    System.out.println(response);
}

注意: 当不指定domainName的时候,查询返回的结果为用户所有加速域名的流量统计之和

查询域名状态码统计

public void getDomainHttpCode(CdnClient client, String domainName) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    GetStatHttpCodeRequest request = new GetStatHttpCodeRequest()
            .withDomain(domainName)
            .withStartTime(sdf.parse("2017-03-10 10:00"))
            .withEndTime(sdf.parse("2017-03-11 10:00"));
    GetStatHttpCodeResponse response = client.getStatHttpCode(request);
    System.out.println(response);
}

注意: 当不指定domainName的时候,查询返回的结果为用户所有加速域名的状态码统计之和

查询域名命中率

public void getDomainHitRate(CdnClient client, String domainName) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    GetStatHitRateRequest request = new GetStatHitRateRequest()
            .withDomain(domainName)
            .withStartTime(sdf.parse("2017-03-10 10:00"))
            .withEndTime(sdf.parse("2017-03-11 10:00"));
    GetStatHitRateResponse response = client.getStatHitRate(request);
    System.out.println(response);
}

注意: 当不指定domainName的时候,查询返回的结果为用户所有加速域名的命中率统计之和

查询过去域名访次数Top 100的url

public void testGetDomainTopUrl(CdnClient client, String domainName) throws Exception {
    GetStatTopUrlRequest request = new GetStatTopUrlRequest()
            .withDomain(domainName)
            .withStartTime(new Date(new Date().getTime() - 3600*1000))
            .withEndTime(new Date())
            .withPeriod(3600);
    GetStatTopUrlResponse response = client.getStatTopUrl(request);
    System.out.println(response);
}

注意: 当不指定domainName的时候,查询返回的结果为用户所有加速域名的统计汇总

查询过去域名访次数Top 100的referer

public void testGetDomainTopReferer(CdnClient client, String domainName) throws Exception {
    GetStatTopRefererRequest request = new GetStatTopRefererRequest()
  &nbs