本文介绍如何使用 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;
}
相关文档
关于设置防盗链的完整示例代码,请参见PutBucketReferer.cpp。
关于获取防盗链配置的完整示例代码,请参见GetBucketReferer.cpp。
该文章对您有帮助吗?