RequestContext preserves the exact query string

Before this change RequestContext::get_query() returned a reordered
query string (alphabetically sorted by the parameter names).

This fix facilitiates testing of responses where the request URL appears
in the response.
This commit is contained in:
Veloman Yunkan
2022-10-21 19:49:43 +04:00
parent 9409e8bd91
commit cb02dbd92a
4 changed files with 19 additions and 12 deletions

View File

@ -107,6 +107,14 @@ MHD_Result RequestContext::fill_argument(void *__this, enum MHD_ValueKind kind,
{
RequestContext *_this = static_cast<RequestContext*>(__this);
_this->arguments[key].push_back(value == nullptr ? "" : value);
if ( ! _this->queryString.empty() ) {
_this->queryString += "&";
}
_this->queryString += key;
if ( value ) {
_this->queryString += "=";
_this->queryString += value;
}
return MHD_YES;
}

View File

@ -92,9 +92,7 @@ class RequestContext {
std::string get_url_part(int part) const;
std::string get_full_url() const;
std::string get_query(bool mustEncode = false) const {
return get_query([](const std::string& key) {return true;}, mustEncode);
}
std::string get_query() const { return queryString; }
template<class F>
std::string get_query(F filter, bool mustEncode) const {
@ -132,6 +130,7 @@ class RequestContext {
ByteRange byteRange_;
std::map<std::string, std::string> headers;
std::map<std::string, std::vector<std::string>> arguments;
std::string queryString;
private: // functions
static MHD_Result fill_header(void *, enum MHD_ValueKind, const char*, const char*);