in nlsCppSdk/token/src/CommonClient.cpp [442:552]
HttpRequest CommonClient::buildFileTransHttpRequest(
const std::string &endpoint, const CommonRequest &msg,
HttpRequest::Method method) const {
const Credentials credentials = credentialsProvider_->getCredentials();
Url url;
url.setScheme("http");
url.setHost(endpoint);
url.setPath(msg.resourcePath());
std::map<std::string, std::string> queryParams;
queryParams["AccessKeyId"] = credentials.accessKeyId();
if (!credentials.stsToken().empty()) {
queryParams["SecurityToken"] = credentials.stsToken();
}
queryParams["Action"] = msg.action();
queryParams["Format"] = "JSON";
queryParams["RegionId"] = configuration().regionId();
queryParams["SignatureMethod"] = "HMAC-SHA1";
queryParams["SignatureNonce"] = GenerateUuid();
queryParams["SignatureVersion"] = "1.0";
if (method == HttpRequest::Post) {
queryParams["Task"] = msg.task();
// std::cout<< "Task: " << msg.task() << std::endl << std::endl;
} else {
queryParams["TaskId"] = msg.taskId();
// std::cout<< "TaskId: " << msg.taskId() << std::endl << std::endl;
}
std::time_t t = std::time(NULL);
std::string date;
struct tm gmt;
char tmbuff[32] = {0};
#if defined(__linux__)
gmtime_r(&t, &gmt);
#else
gmtime_s(&gmt, &t);
#endif
sprintf(tmbuff, WindowsSize "%d-%02d-%02dT%02d:%02d:%02dZ",
1900 + gmt.tm_year, 1 + gmt.tm_mon, gmt.tm_mday, gmt.tm_hour,
gmt.tm_min, gmt.tm_sec);
date = tmbuff;
// std::cout<< "Timestamp: " << date << std::endl << std::endl;
queryParams["Timestamp"] = date;
queryParams["Version"] = msg.version();
// std::cout<< "Method: " << HttpMethodToString(method) << std::endl <<
// std::endl;
std::stringstream filePlaintext;
filePlaintext << HttpMethodToString(method) << "&" << UrlEncode(url.path())
<< "&" << UrlEncode(canonicalizedQuery(queryParams));
// std::cout<< "Signature String: " << filePlaintext.str() << std::endl <<
// std::endl;
std::string tmp = signer_->generate(filePlaintext.str(),
credentials.accessKeySecret() + "&");
queryParams["Signature"] = tmp;
// std::cout<< "Signature Result: " << tmp << std::endl << std::endl;
std::stringstream queryString;
std::map<std::string, std::string>::iterator p1;
for (p1 = queryParams.begin(); p1 != queryParams.end(); ++p1) {
std::string key = p1->first;
if (strncmp(key.c_str(), "Task", key.size()) != 0) {
queryString << "&" << p1->first << "=" << UrlEncode(p1->second);
}
}
url.setQuery(queryString.str().substr(1));
// std::cout<< "URL: " << url.toString() << std::endl << std::endl;
HttpRequest request(url);
request.setMethod(method);
request.setHeader("Accept", "application/json");
if (msg.hasContent()) {
std::string body = "Task=" + UrlEncode(msg.task());
request.setBody(body.c_str(), body.size());
std::stringstream sLength;
sLength << body.size();
request.setHeader("Content-Length", sLength.str());
request.setHeader("Content-Type",
"application/x-www-form-urlencoded;charset=utf-8");
request.setHeader("Content-MD5",
ComputeContentMD5(msg.content(), msg.contentSize()));
}
// std::cout<< "Host: " << url.host() << std::endl;
request.setHeader("Host", url.host());
request.setHeader("Accept-Encoding", "identity");
request.setHeader("x-sdk-client", std::string("CPP/").append("1.3.2"));
request.setHeader("x-sdk-invoke-type", "common");
request.setHeader("Cache-Control", "no-cache");
request.setHeader("Pragma", "no-cache");
request.setHeader("Connection", "keep-alive");
// std::cout<< "End. " << std::endl;
return request;
}