OSSClient is used to manage Object Storage Service (OSS) resources such as buckets and objects. To use OSS SDK for C++ to initiate a request, you must initialize an OSSClient instance and modify the default configuration items of ClientConfiguration.
Configure the OSSClient instance
Parameter | Description |
---|---|
userAgent | The user agent (the User-Agent field in the HTTP header). Default value: aliyun-sdk-cpp/1.X.X. |
maxConnections | The maximum number of connections. Default value: 16. |
requestTimeoutMs | The request timeout period. Unit: milliseconds. The connection is closed if no data is received during the timeout period. Default value: 10000. Unit: milliseconds. |
connectTimeoutMs | The timeout period to establish a connection. Default value: 5000. Unit: milliseconds. |
retryStrategy | The maximum number of allowed retry attempts in the case of a request error. |
proxyScheme | The proxy protocol. Default value: HTTP. |
proxyPort | The port that is used to connect to the proxy server. |
proxyPassword | The password that is used to log on to the proxy server. |
proxyUserName | The username that is used to log on to the proxy server. |
verifySSL | Specifies whether to enable SSL-based authentication. By default, SSL-based authentication
is disabled.
Note By default, SSL-based authentication is enabled in OSS SDK for C++ V1.8.2 or later.
|
caPath | The root path of the CA certificate. This parameter is valid when verifySSL is set to true. This parameter is empty by default. |
caFile | The path of the CA certificate. This parameter is valid when verifySSL is set to true. This parameter is empty by default. |
enableCrc64 | Specifies whether to enable CRC-64. By default, CRC-64 is enabled. |
enableDateSkewAdjustment | Specifies whether to enable the automatic correction of HTTP request time. By default, the automatic correction of HTTP request time is enabled. |
sendRateLimiter | The limit of the upload speed. Unit: KB/s. |
recvRateLimiter | The limit of the download speed. Unit: KB/s. |
Configure a timeout period
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize resources such as networks. */
InitializeSdk();
ClientConfiguration conf;
/* Specify the maximum number of connections. The default value is 16. */
conf.maxConnections = 20;
/* Specify the request timeout period in milliseconds. The connection is closed if no data is received during the timeout period. The default value is 10000. */
conf.requestTimeoutMs = 8000;
/* Specify the timeout period in milliseconds to establish a connection. The default value is 5000. */
conf.connectTimeoutMs = 8000;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* Release resources such as networks. */
ShutdownSdk();
return 0;
}
Configure SSL-based authentication
By default, SSL-based authentication is enabled in OSS SDK for C++ V1.8.2 or later. If SSL-based authentication fails, you must set the correct path of the SSL certificate, or disable SSL-based authentication.
The following code provides an example on how to configure SSL-based authentication:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize resources such as networks. */
InitializeSdk();
ClientConfiguration conf;
/* Configure SSL-based authentication. The default value is true, which indicates that SSL-based authentication is enabled. */
conf.verifySSL = true;
/* Specify the root path of the CA certificate. This parameter is valid when verifySSL is set to true. This parameter is empty by default. */
conf.caPath = "/etc/ssl/certs/";
/* Specify the path of the CA certificate. This parameter is valid when verifySSL is set to true. This parameter is empty by default. */
conf.caFile = "/etc/ssl/certs/ca-certificates.crt";;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* Release resources such as networks. */
ShutdownSdk();
return 0;
}
Configure bandwidth throttling
#include <alibabacloud/oss/OssClient.h>
#include <alibabacloud/oss/client/RateLimiter.h>
using namespace AlibabaCloud::OSS;
class UserRateLimiter : public RateLimiter
{
public:
UserRateLimiterr() :rate_(0) {};
~UserRateLimiterr() {};
virtual void setRate(int rate) { rate_ = rate; };
virtual int Rate() const { return rate_; };
private:
int rate_;
};
int main(void)
{
/* Initialize the information about the account that is used to access OSS. */
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
std::string Endpoint = "yourEndpoint";
std::string BucketName = "yourBucketName";
std::string ObjectName = "yourObjectName";
/* Initialize resources such as networks. */
InitializeSdk();
ClientConfiguration conf;
auto sendrateLimiter = std::make_shared<UserRateLimiter>();
auto recvrateLimiter = std::make_shared<UserRateLimiter>();
conf.sendRateLimiter = sendrateLimiter;
conf.recvRateLimiter = recvrateLimiter;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* Configure bandwidth throttling for the download. Unit: KB/s. */
recvrateLimiter->setRate(256);
/* Configure bandwidth throttling for the upload. Unit: KB/s. */
sendrateLimiter->setRate(256);
/* Upload the object. */
auto outcome = client.PutObject(BucketName, ObjectName,"yourLocalFilename");
/* Update the speed limit during the upload. Unit: KB/s. */
sendrateLimiter->setRate(300);
/* Release resources such as networks. */
ShutdownSdk();
return 0;
}
Configure a retry policy
The following code provides an example on how to configure a retry policy:
#include <alibabacloud/oss/OssClient.h>
#include <alibabacloud/oss/client/RetryStrategy.h>
using namespace AlibabaCloud::OSS;
class UserRetryStrategy : public RetryStrategy
{
public:
/* maxRetries indicates the maximum number of allowed retry attempts. scaleFactor indicates the factor that is used to calculate the time to wait before a retry is attempted. */
UserRetryStrategy(long maxRetries = 3, long scaleFactor = 300) :
m_scaleFactor(scaleFactor), m_maxRetries(maxRetries)
{}
/* You can define the shouldRetry function to determine whether to retry a request. */
bool shouldRetry(const Error & error, long attemptedRetries) const;
/* You can define the calcDelayTimeMs function to calculate the time to wait before a retry is attempted. */
long calcDelayTimeMs(const Error & error, long attemptedRetries) const;
private:
long m_scaleFactor;
long m_maxRetries;
};
bool UserRetryStrategy::shouldRetry(const Error & error, long attemptedRetries) const
{
if (attemptedRetries >= m_maxRetries)
return false;
long responseCode = error.Status();
//http code
if ((responseCode == 403 && error.Message().find("RequestTimeTooSkewed") != std::string::npos) ||
(responseCode > 499 && responseCode < 599)) {
return true;
}
else {
switch (responseCode)
{
//curl error code
case (ERROR_CURL_BASE + 7): //CURLE_COULDNT_CONNECT
case (ERROR_CURL_BASE + 18): //CURLE_PARTIAL_FILE
case (ERROR_CURL_BASE + 23): //CURLE_WRITE_ERROR
case (ERROR_CURL_BASE + 28): //CURLE_OPERATION_TIMEDOUT
case (ERROR_CURL_BASE + 52): //CURLE_GOT_NOTHING
case (ERROR_CURL_BASE + 55): //CURLE_SEND_ERROR
case (ERROR_CURL_BASE + 56): //CURLE_RECV_ERROR
return true;
default:
break;
};
}
return false;
}
long UserRetryStrategy::calcDelayTimeMs(const Error & error, long attemptedRetries) const
{
UNUSED_PARAM(error);
return (1 << attemptedRetries) * m_scaleFactor;
}
int main(void)
{
/* Initialize resources such as networks. */
InitializeSdk();
ClientConfiguration conf;
/* Configure the maximum number of allowed retry attempts in the case of a request error. The default value is 3. */
auto defaultRetryStrategy = std::make_shared<UserRetryStrategy>(5);
conf.retryStrategy = defaultRetryStrategy;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* Release resources such as networks. */
ShutdownSdk();
return 0;
}