supported body parameter.
This commit is contained in:
@@ -63,28 +63,33 @@ HttpRequest RpcServiceClient::buildHttpRequest(const std::string & endpoint,
|
||||
const Credentials credentials = credentialsProvider_->getCredentials();
|
||||
|
||||
Url url;
|
||||
if (msg.scheme().empty()) {
|
||||
if (msg.scheme().empty())
|
||||
{
|
||||
url.setScheme("https");
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
url.setScheme(msg.scheme());
|
||||
}
|
||||
url.setHost(endpoint);
|
||||
url.setPath(msg.resourcePath());
|
||||
|
||||
std::map<std::string, std::string> signParams;
|
||||
|
||||
auto params = msg.parameters();
|
||||
std::map <std::string, std::string> queryParams;
|
||||
for (const auto &p : params) {
|
||||
for (const auto &p : params)
|
||||
{
|
||||
if (!p.second.empty())
|
||||
queryParams[p.first] = p.second;
|
||||
signParams[p.first] = p.second;
|
||||
}
|
||||
|
||||
queryParams["AccessKeyId"] = credentials.accessKeyId();
|
||||
queryParams["Format"] = "JSON";
|
||||
queryParams["RegionId"] = configuration().regionId();
|
||||
queryParams["SecurityToken"] = credentials.sessionToken();
|
||||
queryParams["SignatureMethod"] = signer_->name();
|
||||
queryParams["SignatureNonce"] = GenerateUuid();
|
||||
queryParams["SignatureVersion"] = signer_->version();
|
||||
signParams["AccessKeyId"] = credentials.accessKeyId();
|
||||
signParams["Format"] = "JSON";
|
||||
signParams["RegionId"] = configuration().regionId();
|
||||
signParams["SecurityToken"] = credentials.sessionToken();
|
||||
signParams["SignatureMethod"] = signer_->name();
|
||||
signParams["SignatureNonce"] = GenerateUuid();
|
||||
signParams["SignatureVersion"] = signer_->version();
|
||||
std::time_t t = std::time(nullptr);
|
||||
std::stringstream ss;
|
||||
#if defined(__GNUG__) && __GNUC__ < 5
|
||||
@@ -94,28 +99,42 @@ HttpRequest RpcServiceClient::buildHttpRequest(const std::string & endpoint,
|
||||
#else
|
||||
ss << std::put_time(std::gmtime(&t), "%FT%TZ");
|
||||
#endif
|
||||
queryParams["Timestamp"] = ss.str();
|
||||
queryParams["Version"] = msg.version();
|
||||
signParams["Timestamp"] = ss.str();
|
||||
signParams["Version"] = msg.version();
|
||||
|
||||
std::map<std::string, std::string> query;
|
||||
for (const auto &p : signParams)
|
||||
{
|
||||
query[p.first] = p.second;
|
||||
}
|
||||
|
||||
auto body_params = msg.bodyParameters();
|
||||
for (const auto &p : body_params)
|
||||
{
|
||||
signParams[p.first] = p.second;
|
||||
}
|
||||
|
||||
std::stringstream plaintext;
|
||||
plaintext << HttpMethodToString(method)
|
||||
<< "&"
|
||||
<< UrlEncode(url.path())
|
||||
<< "&"
|
||||
<< UrlEncode(canonicalizedQuery(queryParams));
|
||||
|
||||
queryParams["Signature"] = signer_->generate(plaintext.str(),
|
||||
credentials.accessKeySecret() + "&");
|
||||
<< "&"
|
||||
<< UrlEncode(url.path())
|
||||
<< "&"
|
||||
<< UrlEncode(canonicalizedQuery(signParams));
|
||||
query["Signature"] = signer_->generate(plaintext.str(),
|
||||
credentials.accessKeySecret() + "&");
|
||||
|
||||
std::stringstream queryString;
|
||||
for (const auto &p : queryParams)
|
||||
for (const auto &p : query)
|
||||
queryString << "&" << p.first << "=" << UrlEncode(p.second);
|
||||
url.setQuery(queryString.str().substr(1));
|
||||
|
||||
HttpRequest request(url);
|
||||
if (msg.connectTimeout() != kInvalidTimeout) {
|
||||
if (msg.connectTimeout() != kInvalidTimeout)
|
||||
{
|
||||
request.setConnectTimeout(msg.connectTimeout());
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
request.setConnectTimeout(configuration().connectTimeout());
|
||||
}
|
||||
|
||||
@@ -127,16 +146,26 @@ HttpRequest RpcServiceClient::buildHttpRequest(const std::string & endpoint,
|
||||
}
|
||||
}
|
||||
|
||||
if (msg.readTimeout() != kInvalidTimeout) {
|
||||
if (msg.readTimeout() != kInvalidTimeout)
|
||||
{
|
||||
request.setReadTimeout(msg.readTimeout());
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
request.setReadTimeout(configuration().readTimeout());
|
||||
}
|
||||
|
||||
request.setMethod(method);
|
||||
request.setHeader("Host", url.host());
|
||||
request.setHeader("x-sdk-client",
|
||||
std::string("CPP/").append(ALIBABACLOUD_VERSION_STR));
|
||||
std::string("CPP/").append(ALIBABACLOUD_VERSION_STR));
|
||||
std::stringstream tmp;
|
||||
for (const auto &p : body_params)
|
||||
tmp << "&" << p.first << "=" << UrlEncode(p.second);
|
||||
if(tmp.str().length() > 0){
|
||||
std::string body = tmp.str().substr(1);
|
||||
request.setBody(body.c_str(), body.length());
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user