mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-29 14:45:55 +08:00
修复multimap导致重复http头的bug
This commit is contained in:
parent
477606d90c
commit
e365824be2
@ -69,17 +69,16 @@ void HttpClient::sendRequest(const string &strUrl, float fTimeOutSec) {
|
|||||||
//服务器域名
|
//服务器域名
|
||||||
host = FindField(host.data(), NULL, ":");
|
host = FindField(host.data(), NULL, ":");
|
||||||
}
|
}
|
||||||
_header.emplace(string("Host"), host);
|
_header.emplace("Host", host);
|
||||||
_header.emplace(string("Tools"), "ZLMediaKit");
|
_header.emplace("Tools", "ZLMediaKit");
|
||||||
_header.emplace(string("Connection"), "keep-alive");
|
_header.emplace("Connection", "keep-alive");
|
||||||
_header.emplace(string("Accept"), "*/*");
|
_header.emplace("Accept", "*/*");
|
||||||
_header.emplace(string("Accept-Language"), "zh-CN,zh;q=0.8");
|
_header.emplace("Accept-Language", "zh-CN,zh;q=0.8");
|
||||||
_header.emplace(string("User-Agent"),
|
_header.emplace("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36");
|
||||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36");
|
|
||||||
|
|
||||||
if (_body && _body->remainSize()) {
|
if (_body && _body->remainSize()) {
|
||||||
_header.emplace(string("Content-Length"), to_string(_body->remainSize()));
|
_header.emplace("Content-Length", to_string(_body->remainSize()));
|
||||||
_header.emplace(string("Content-Type"), "application/x-www-form-urlencoded; charset=UTF-8");
|
_header.emplace("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bChanged = (_lastHost != host + ":" + to_string(port)) || (_isHttps != isHttps);
|
bool bChanged = (_lastHost != host + ":" + to_string(port)) || (_isHttps != isHttps);
|
||||||
@ -94,7 +93,7 @@ void HttpClient::sendRequest(const string &strUrl, float fTimeOutSec) {
|
|||||||
}
|
}
|
||||||
if(!printer.empty()){
|
if(!printer.empty()){
|
||||||
printer.pop_back();
|
printer.pop_back();
|
||||||
_header.emplace(string("Cookie"), printer);
|
_header.emplace("Cookie", printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,15 +125,30 @@ struct StrCaseCompare {
|
|||||||
|
|
||||||
class StrCaseMap : public multimap<string, string, StrCaseCompare>{
|
class StrCaseMap : public multimap<string, string, StrCaseCompare>{
|
||||||
public:
|
public:
|
||||||
|
typedef multimap<string, string, StrCaseCompare> Super ;
|
||||||
StrCaseMap() = default;
|
StrCaseMap() = default;
|
||||||
~StrCaseMap() = default;
|
~StrCaseMap() = default;
|
||||||
string &operator[](const string &key){
|
string &operator[](const string &key){
|
||||||
auto it = find(key);
|
auto it = find(key);
|
||||||
if(it == end()){
|
if(it == end()){
|
||||||
it = emplace(key,"");
|
it = Super::emplace(key,"");
|
||||||
}
|
}
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class K,class V>
|
||||||
|
void emplace(K &&k , V &&v) {
|
||||||
|
auto it = find(k);
|
||||||
|
if(it != end()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Super::emplace(std::forward<K>(k),std::forward<V>(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class K,class V>
|
||||||
|
void emplace_force(K &&k , V &&v) {
|
||||||
|
Super::emplace(std::forward<K>(k),std::forward<V>(v));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Parser {
|
class Parser {
|
||||||
@ -167,7 +182,7 @@ public:
|
|||||||
auto field = FindField(line.data(), NULL, ": ");
|
auto field = FindField(line.data(), NULL, ": ");
|
||||||
auto value = FindField(line.data(), ": ", NULL);
|
auto value = FindField(line.data(), ": ", NULL);
|
||||||
if (field.size() != 0) {
|
if (field.size() != 0) {
|
||||||
_mapHeaders.emplace(field,value);
|
_mapHeaders.emplace_force(field,value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start = start + line.size() + 2;
|
start = start + line.size() + 2;
|
||||||
@ -247,7 +262,7 @@ public:
|
|||||||
for (string &key_val : arg_vec) {
|
for (string &key_val : arg_vec) {
|
||||||
auto key = FindField(key_val.data(), NULL, key_delim);
|
auto key = FindField(key_val.data(), NULL, key_delim);
|
||||||
auto val = FindField(key_val.data(), key_delim, NULL);
|
auto val = FindField(key_val.data(), key_delim, NULL);
|
||||||
ret.emplace(key,val);
|
ret.emplace_force(key,val);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user