3
3
#include " auth/SignV4.h"
4
4
using namespace VolcengineTos ;
5
5
6
+ // 合并 GenericInput RequestHeader 和请求中的 header
7
+ void mergeRequestHeaderAndHeader (const std::map<std::string, std::string> &reqHeader, std::map<std::string, std::string> &header) {
8
+ if (reqHeader.empty ())
9
+ return ;
10
+
11
+ std::map<std::string, std::string> lower_header;
12
+ for (const auto & pair : header) {
13
+ lower_header[StringUtils::toLower (pair.first )] = pair.second ;
14
+ }
15
+
16
+ auto iter = reqHeader.begin ();
17
+ for (; iter != reqHeader.end (); iter++) {
18
+ if (iter->first .empty ()) {
19
+ continue ;
20
+ }
21
+
22
+ std::string key (iter->first );
23
+ std::string kk = StringUtils::toLower (key);
24
+
25
+ if (kk == " content-length" || kk == " host" || kk == " x-tos-date" ||
26
+ kk == " range" || kk == " transfer-encoding" || kk == " authorization" ||
27
+ kk == " date" ) {
28
+ continue ;
29
+ }
30
+
31
+ if (lower_header.find (kk) == lower_header.end ()) {
32
+ header.insert ({iter->first , iter->second }); // 如果不存在,插入键值对
33
+ }
34
+ }
35
+ }
36
+
6
37
std::shared_ptr<TosRequest> RequestBuilder::build (const std::string& method) {
7
38
std::string host, path;
8
39
if (isCustomDomain_){
@@ -20,13 +51,15 @@ std::shared_ptr<TosRequest> RequestBuilder::build(const std::string& method) {
20
51
}
21
52
}
22
53
54
+ mergeRequestHeaderAndHeader (requestHeader_, headers_);
23
55
auto req = std::make_shared<TosRequest>(scheme_, method, host, path, headers_, query_);
24
56
req->setRequestDate (requestDate_);
25
57
return req;
26
58
}
27
59
28
60
std::shared_ptr<TosRequest> RequestBuilder::buildControlRequest (const std::string& method) {
29
61
std::string host = accountID_ + " ." + controlHost_;
62
+ mergeRequestHeaderAndHeader (requestHeader_, headers_);
30
63
auto req = std::make_shared<TosRequest>(scheme_, method, host, " /qospolicy" , headers_, query_);
31
64
req->setRequestDate (requestDate_);
32
65
return req;
@@ -46,6 +79,7 @@ std::shared_ptr<TosRequest> RequestBuilder::buildSignedURL(const std::string& me
46
79
path += object_;
47
80
}
48
81
82
+ mergeRequestHeaderAndHeader (requestHeader_, headers_);
49
83
auto req = std::make_shared<TosRequest>(scheme_, method, host, path, headers_, query_);
50
84
req->setRequestDate (requestDate_);
51
85
return req;
0 commit comments