diff --git a/lib/downloader.cpp b/lib/downloader.cpp index b2ace65c..e892355d 100644 --- a/lib/downloader.cpp +++ b/lib/downloader.cpp @@ -108,7 +108,7 @@ namespace HTTP{ H.SetHeader("Host", proxyUrl.host); } }else{ - H.url = "/" + Encodings::URL::encode(link.path); + H.url = "/" + Encodings::URL::encode(link.path, "/:=@[]"); if (link.args.size()){H.url += "?" + link.args;} if (link.port.size()){ H.SetHeader("Host", link.host + ":" + link.port); diff --git a/lib/encode.cpp b/lib/encode.cpp index 8f8b4e13..7af00bfb 100644 --- a/lib/encode.cpp +++ b/lib/encode.cpp @@ -97,8 +97,8 @@ namespace Encodings{ for (int i = 0; i < max; i++){ if (('0' <= c[i] && c[i] <= '9') || ('a' <= c[i] && c[i] <= 'z') || ('A' <= c[i] && c[i] <= 'Z') || - (c[i] == '$' || c[i] == '-' || c[i] == '_' || c[i] == '.' || c[i] == ',' || c[i] == '!' || - c[i] == '*' || c[i] == '(' || c[i] == ')' || c[i] == '/' || c[i] == '\'') || (ign.size() && ign.find(c[i]) != std::string::npos)){ + (c[i] == '$' || c[i] == '-' || c[i] == '_' || c[i] == '.' || c[i] == ',' || c[i] == '!' || c[i] == '~' || c[i] == ';' || + c[i] == '*' || c[i] == '(' || c[i] == ')' || c[i] == '\'') || (ign.size() && ign.find(c[i]) != std::string::npos)){ escaped.append(&c[i], 1); }else{ if (c[i] == ' '){ diff --git a/lib/http_parser.cpp b/lib/http_parser.cpp index 15a415c8..db1848b5 100644 --- a/lib/http_parser.cpp +++ b/lib/http_parser.cpp @@ -185,10 +185,10 @@ std::string HTTP::URL::getUrl() const{ if (protocol == "rtsp"){ if (path.size()){ret += Encodings::URL::encode(path, "=#?&");} }else{ - if (path.size()){ret += Encodings::URL::encode(path, "=");} + if (path.size()){ret += Encodings::URL::encode(path, "/:=@[]");} } if (args.size()){ret += "?" + args;} - if (frag.size()){ret += "#" + Encodings::URL::encode(frag, "=");} + if (frag.size()){ret += "#" + Encodings::URL::encode(frag, "/:=@[]#?&");} return ret; } @@ -215,7 +215,7 @@ std::string HTTP::URL::getProxyUrl() const{ if (protocol == "rtsp"){ if (path.size()){ret += Encodings::URL::encode(path, "=#?&");} }else{ - if (path.size()){ret += Encodings::URL::encode(path, "=");} + if (path.size()){ret += Encodings::URL::encode(path, "/:=@[]");} } if (args.size()){ret += "?" + args;} return ret; @@ -242,7 +242,7 @@ std::string HTTP::URL::getBareUrl() const{ if (protocol == "rtsp"){ if (path.size()){ret += Encodings::URL::encode(path, "=#?&");} }else{ - if (path.size()){ret += Encodings::URL::encode(path, "=");} + if (path.size()){ret += Encodings::URL::encode(path, "/:=@[]");} } return ret; }