防盗链(C++ SDK V2)

更新时间:
复制为 MD 格式

本文介绍如何使用 OSS C++ SDK V2 设置和获取存储空间(Bucket)的防盗链(Referer)配置。

注意事项

  • 运行示例代码前,请将代码中的 <region> 替换为实际的地域,如 cn-hangzhou

  • 本文示例代码使用环境变量获取访问凭证。关于配置访问凭证的更多信息,请参见配置访问凭证

  • 要设置防盗链,您必须拥有 oss:PutBucketReferer 权限。要获取防盗链配置,您必须拥有 oss:GetBucketReferer 权限。

示例代码

设置防盗链

以下代码演示如何设置存储空间的防盗链配置:

#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"

namespace oss = alibabacloud::oss2;

int main() {
    auto conf = oss::ClientConfiguration::loadDefault();
    conf.region = "<region>";
    conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();

    oss::OSSClient client(conf);

    oss::models::RefererList refererList;
    refererList.referers.push_back("https://www.example.com");
    refererList.referers.push_back("https://*.example.com");

    oss::models::RefererConfiguration refConf;
    refConf.allowEmptyReferer = true;
    refConf.refererList = refererList;

    auto outcome = client.putBucketReferer(
        oss::models::PutBucketRefererRequest()
            .setBucket("examplebucket")
            .setRefererConfiguration(refConf));

    if (!outcome.has_value()) {
        auto& e = outcome.error();
        std::cerr << "设置防盗链失败"
                  << ", code: " << e.getCode()
                  << ", message: " << e.getMessage()
                  << ", requestId: " << e.getRequestId() << std::endl;
        return 1;
    }

    auto& result = outcome.value();
    std::cout << "设置防盗链成功"
              << ", status: " << result.getStatusCode()
              << ", requestId: " << result.getRequestId() << std::endl;
    return 0;
}
          

获取防盗链配置

以下代码演示如何获取存储空间的防盗链配置:

#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"

namespace oss = alibabacloud::oss2;

int main() {
    auto conf = oss::ClientConfiguration::loadDefault();
    conf.region = "<region>";
    conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();

    oss::OSSClient client(conf);

    auto outcome = client.getBucketReferer(
        oss::models::GetBucketRefererRequest()
            .setBucket("examplebucket"));

    if (!outcome.has_value()) {
        auto& e = outcome.error();
        std::cerr << "获取防盗链配置失败"
                  << ", code: " << e.getCode()
                  << ", message: " << e.getMessage()
                  << ", requestId: " << e.getRequestId() << std::endl;
        return 1;
    }

    auto& result = outcome.value();
    auto& conf2 = result.getRefererConfiguration();
    std::cout << "获取防盗链配置成功" << std::endl;
    std::cout << "AllowEmptyReferer: " << conf2.allowEmptyReferer.value_or(false) << std::endl;
    if (conf2.refererList) {
        for (const auto& r : conf2.refererList->referers) {
            std::cout << "Referer: " << r << std::endl;
        }
    }
    return 0;
}
          

相关文档