Modifying URL encoding of HTTP requests

This commit is contained in:
an-tao 2019-04-03 00:17:30 +08:00
parent d2e654e931
commit e128a27c58
3 changed files with 22 additions and 5 deletions

View File

@ -275,7 +275,8 @@ void doTest(const HttpClientPtr &client, std::promise<int> &pro, bool isHttps =
req = HttpRequest::newHttpRequest(); req = HttpRequest::newHttpRequest();
req->setMethod(drogon::Get); req->setMethod(drogon::Get);
req->setPath("/api/v1/apitest/3.14/List?P2=1234"); req->setPath("/api/v1/apitest/3.14/List");
req->setParameter("P2","1234");
client->sendRequest(req, [=](ReqResult result, const HttpResponsePtr &resp) { client->sendRequest(req, [=](ReqResult result, const HttpResponsePtr &resp) {
if (result == ReqResult::Ok) if (result == ReqResult::Ok)
{ {
@ -375,7 +376,8 @@ void doTest(const HttpClientPtr &client, std::promise<int> &pro, bool isHttps =
/// Test static function /// Test static function
req = HttpRequest::newHttpRequest(); req = HttpRequest::newHttpRequest();
req->setMethod(drogon::Get); req->setMethod(drogon::Get);
req->setPath("/api/v1/handle11/11/22/?p3=33&p4=44"); req->setPath("/api/v1/handle11/11/22/?p3=33");
req->setParameter("p4","44");
client->sendRequest(req, [=](ReqResult result, const HttpResponsePtr &resp) { client->sendRequest(req, [=](ReqResult result, const HttpResponsePtr &resp) {
if (result == ReqResult::Ok) if (result == ReqResult::Ok)
{ {

View File

@ -119,7 +119,7 @@ void HttpRequestImpl::appendToBuffer(MsgBuffer *output) const
if (!_path.empty()) if (!_path.empty())
{ {
output->append(_path); output->append(utils::urlEncode(_path));
} }
else else
{ {
@ -138,9 +138,21 @@ void HttpRequestImpl::appendToBuffer(MsgBuffer *output) const
} }
content.resize(content.length() - 1); content.resize(content.length() - 1);
content = utils::urlEncode(content); content = utils::urlEncode(content);
if (_method == Get || _method == Delete) if (_method == Get || _method == Delete || _method == Head)
{ {
output->append("?"); auto ret = std::find(output->peek(), (const char *)output->beginWrite(), '?');
if (ret != output->beginWrite())
{
if (ret != output->beginWrite() - 1)
{
output->append("&");
}
}
else
{
output->append("?");
}
output->append(content); output->append(content);
content.clear(); content.clear();
} }

View File

@ -430,6 +430,9 @@ std::string urlEncode(const std::string &src)
case ')': case ')':
case '&': case '&':
case '=': case '=':
case '/':
case '\\':
case '?':
result.append(1, *iter); result.append(1, *iter);
break; break;
// escape // escape