|
|
|
@ -10,23 +10,28 @@ namespace Bk::Net { |
|
|
|
|
HttpRequest::HttpRequest(std::string data) |
|
|
|
|
{ |
|
|
|
|
auto lines = Tools::string_split(data, "\n"); |
|
|
|
|
auto first_line = std::string(lines->at(0)); |
|
|
|
|
auto req_data = Tools::string_split(first_line, " "); |
|
|
|
|
|
|
|
|
|
auto req_data = Tools::string_split(lines->at(0), " "); |
|
|
|
|
if(req_data->size() > 0) method = req_data->at(0); |
|
|
|
|
if(req_data->size() > 1) url = req_data->at(1); |
|
|
|
|
if(req_data->size() > 2) version = req_data->at(2); |
|
|
|
|
|
|
|
|
|
body = std::string(lines->at(lines->size() - 1)); |
|
|
|
|
lines->erase(lines->begin()); |
|
|
|
|
//lines->erase(lines->end());
|
|
|
|
|
for (auto line : *lines) |
|
|
|
|
|
|
|
|
|
for (auto line = lines->begin(); line != lines->end(); line++) |
|
|
|
|
{ |
|
|
|
|
auto param = Tools::string_split(line, ":", 1); |
|
|
|
|
if (param->size() >= 2)
|
|
|
|
|
if (*line != "\r") |
|
|
|
|
{ |
|
|
|
|
Tools::string_trim(param->at(1)); |
|
|
|
|
params.insert({param->at(0), param->at(1)}); |
|
|
|
|
auto param = Tools::string_split(*line, ":", 1); |
|
|
|
|
if (param->size() >= 2)
|
|
|
|
|
{ |
|
|
|
|
Tools::string_trim(param->at(1)); |
|
|
|
|
params.insert({param->at(0), param->at(1)}); |
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
else
|
|
|
|
|
{ |
|
|
|
|
for (auto body_line = ++line; body_line != lines->end(); body_line++)
|
|
|
|
|
body += *body_line + "\n"; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -35,20 +40,7 @@ namespace Bk::Net { |
|
|
|
|
{ |
|
|
|
|
std::string request = ""; |
|
|
|
|
request += method + " " + url + " " + version + "\r\n"; |
|
|
|
|
std::string param_order[] =
|
|
|
|
|
{ |
|
|
|
|
"Host", |
|
|
|
|
"User-Agent", |
|
|
|
|
"Accept", |
|
|
|
|
"Accept-Language", |
|
|
|
|
"Accept-Encoding", |
|
|
|
|
"Connection", |
|
|
|
|
"Upgrade-Insecure-Requests", |
|
|
|
|
"Sec-Fetch-Dest", |
|
|
|
|
"Sec-Fetch-Mode", |
|
|
|
|
"Sec-Fetch-Site" |
|
|
|
|
}; |
|
|
|
|
if (params.size()) for ( const auto& param : param_order) if (params[param].length()) request += param + ": " + params[param] + "\r\n"; |
|
|
|
|
if (params.size()) for ( const auto& param : params) request += param.first + ": " + param.second + "\r\n"; |
|
|
|
|
request += "\r\n"; |
|
|
|
|
if (body.length()) request += body; |
|
|
|
|
return request; |
|
|
|
|