supported body parameter.

This commit is contained in:
wb-hx510875
2020-01-19 14:45:57 +08:00
committed by Axios
parent b452038de4
commit 38dab66f9d
3 changed files with 71 additions and 28 deletions

View File

@@ -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;
}