Modifying URL encoding of HTTP requests
This commit is contained in:
parent
d2e654e931
commit
e128a27c58
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -430,6 +430,9 @@ std::string urlEncode(const std::string &src)
|
|||
case ')':
|
||||
case '&':
|
||||
case '=':
|
||||
case '/':
|
||||
case '\\':
|
||||
case '?':
|
||||
result.append(1, *iter);
|
||||
break;
|
||||
// escape
|
||||
|
|
Loading…
Reference in New Issue