diff --git a/examples/simple_example_test/main.cc b/examples/simple_example_test/main.cc index b26b1fc8..f55c4932 100644 --- a/examples/simple_example_test/main.cc +++ b/examples/simple_example_test/main.cc @@ -275,7 +275,8 @@ void doTest(const HttpClientPtr &client, std::promise &pro, bool isHttps = req = HttpRequest::newHttpRequest(); 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) { if (result == ReqResult::Ok) { @@ -375,7 +376,8 @@ void doTest(const HttpClientPtr &client, std::promise &pro, bool isHttps = /// Test static function req = HttpRequest::newHttpRequest(); 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) { if (result == ReqResult::Ok) { diff --git a/lib/src/HttpRequestImpl.cc b/lib/src/HttpRequestImpl.cc index 3a85f475..fd905dff 100755 --- a/lib/src/HttpRequestImpl.cc +++ b/lib/src/HttpRequestImpl.cc @@ -119,7 +119,7 @@ void HttpRequestImpl::appendToBuffer(MsgBuffer *output) const if (!_path.empty()) { - output->append(_path); + output->append(utils::urlEncode(_path)); } else { @@ -138,9 +138,21 @@ void HttpRequestImpl::appendToBuffer(MsgBuffer *output) const } content.resize(content.length() - 1); 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); content.clear(); } diff --git a/lib/src/Utilities.cc b/lib/src/Utilities.cc index 1ea415ab..3a8c3e66 100755 --- a/lib/src/Utilities.cc +++ b/lib/src/Utilities.cc @@ -430,6 +430,9 @@ std::string urlEncode(const std::string &src) case ')': case '&': case '=': + case '/': + case '\\': + case '?': result.append(1, *iter); break; // escape