修复FullUrl()未url转义导致的bug

This commit is contained in:
ziyue 2021-08-26 19:10:04 +08:00
parent 626bf3dcf9
commit 03e9c09c42
4 changed files with 12 additions and 18 deletions

View File

@ -47,8 +47,6 @@ typedef void* mk_parser;
API_EXPORT const char* API_CALL mk_parser_get_method(const mk_parser ctx); API_EXPORT const char* API_CALL mk_parser_get_method(const mk_parser ctx);
//Parser::Url(),获取HTTP的访问url(不包括?后面的参数) //Parser::Url(),获取HTTP的访问url(不包括?后面的参数)
API_EXPORT const char* API_CALL mk_parser_get_url(const mk_parser ctx); API_EXPORT const char* API_CALL mk_parser_get_url(const mk_parser ctx);
//Parser::FullUrl(),包括?后面的参数
API_EXPORT const char* API_CALL mk_parser_get_full_url(const mk_parser ctx);
//Parser::Params(),?后面的参数字符串 //Parser::Params(),?后面的参数字符串
API_EXPORT const char* API_CALL mk_parser_get_url_params(const mk_parser ctx); API_EXPORT const char* API_CALL mk_parser_get_url_params(const mk_parser ctx);
//Parser::getUrlArgs()["key"],获取?后面的参数中的特定参数 //Parser::getUrlArgs()["key"],获取?后面的参数中的特定参数

View File

@ -90,11 +90,6 @@ API_EXPORT const char* API_CALL mk_parser_get_url(const mk_parser ctx){
Parser *parser = (Parser *)ctx; Parser *parser = (Parser *)ctx;
return parser->Url().c_str(); return parser->Url().c_str();
} }
API_EXPORT const char* API_CALL mk_parser_get_full_url(const mk_parser ctx){
assert(ctx);
Parser *parser = (Parser *)ctx;
return parser->FullUrl().c_str();
}
API_EXPORT const char* API_CALL mk_parser_get_url_params(const mk_parser ctx){ API_EXPORT const char* API_CALL mk_parser_get_url_params(const mk_parser ctx){
assert(ctx); assert(ctx);
Parser *parser = (Parser *)ctx; Parser *parser = (Parser *)ctx;

View File

@ -49,16 +49,16 @@ void Parser::Parse(const char *buf) {
} }
if (start == buf) { if (start == buf) {
_strMethod = FindField(line.data(), NULL, " "); _strMethod = FindField(line.data(), NULL, " ");
_strFullUrl = FindField(line.data(), " ", " "); auto strFullUrl = FindField(line.data(), " ", " ");
auto args_pos = _strFullUrl.find('?'); auto args_pos = strFullUrl.find('?');
if (args_pos != string::npos) { if (args_pos != string::npos) {
_strUrl = _strFullUrl.substr(0, args_pos); _strUrl = strFullUrl.substr(0, args_pos);
_params = _strFullUrl.substr(args_pos + 1); _params = strFullUrl.substr(args_pos + 1);
_mapUrlArgs = parseArgs(_params); _mapUrlArgs = parseArgs(_params);
} else { } else {
_strUrl = _strFullUrl; _strUrl = strFullUrl;
} }
_strTail = FindField(line.data(), (_strFullUrl + " ").data(), NULL); _strTail = FindField(line.data(), (strFullUrl + " ").data(), NULL);
} else { } else {
auto field = FindField(line.data(), NULL, ": "); auto field = FindField(line.data(), NULL, ": ");
auto value = FindField(line.data(), ": ", NULL); auto value = FindField(line.data(), ": ", NULL);
@ -82,8 +82,11 @@ const string &Parser::Url() const {
return _strUrl; return _strUrl;
} }
const string &Parser::FullUrl() const { string Parser::FullUrl() const {
return _strFullUrl; if (_params.empty()) {
return _strUrl;
}
return _strUrl + "?" + _params;
} }
const string &Parser::Tail() const { const string &Parser::Tail() const {
@ -105,7 +108,6 @@ const string &Parser::Content() const {
void Parser::Clear() { void Parser::Clear() {
_strMethod.clear(); _strMethod.clear();
_strUrl.clear(); _strUrl.clear();
_strFullUrl.clear();
_params.clear(); _params.clear();
_strTail.clear(); _strTail.clear();
_strContent.clear(); _strContent.clear();

View File

@ -69,7 +69,7 @@ public:
//获取中间url不包含?后面的参数 //获取中间url不包含?后面的参数
const string &Url() const; const string &Url() const;
//获取中间url包含?后面的参数 //获取中间url包含?后面的参数
const string &FullUrl() const; string FullUrl() const;
//获取命令协议名 //获取命令协议名
const string &Tail() const; const string &Tail() const;
//根据header key名获取请求header value值 //根据header key名获取请求header value值
@ -96,7 +96,6 @@ private:
string _strTail; string _strTail;
string _strContent; string _strContent;
string _strNull; string _strNull;
string _strFullUrl;
string _params; string _params;
mutable StrCaseMap _mapHeaders; mutable StrCaseMap _mapHeaders;
mutable StrCaseMap _mapUrlArgs; mutable StrCaseMap _mapUrlArgs;