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->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<int> &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)
{

View File

@ -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();
}

View File

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