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 = 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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue