mirror of
https://github.com/QuasarApp/qthttpserver.git
synced 2025-05-21 05:49:39 +00:00
Fix HTTP chunked request body handling
Task: QTBUG-74843 Change-Id: I4978c80195246c99a5e6d1e608b3980f56b39207 Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
This commit is contained in:
parent
5ad0dd4050
commit
6f7e8d28b4
@ -209,7 +209,13 @@ int QHttpServerRequestPrivate::onBody(http_parser *httpParser, const char *at, s
|
|||||||
qCDebug(lc) << httpParser << QString::fromUtf8(at, int(length));
|
qCDebug(lc) << httpParser << QString::fromUtf8(at, int(length));
|
||||||
auto i = instance(httpParser);
|
auto i = instance(httpParser);
|
||||||
i->state = State::OnBody;
|
i->state = State::OnBody;
|
||||||
i->body = QByteArray(at, int(length));
|
if (i->body.isEmpty()) {
|
||||||
|
i->body.reserve(
|
||||||
|
static_cast<int>(httpParser->content_length) +
|
||||||
|
static_cast<int>(length));
|
||||||
|
}
|
||||||
|
|
||||||
|
i->body.append(at, int(length));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +166,12 @@ void tst_QHttpServer::initTestCase()
|
|||||||
httpserver.route("/check-custom-type/", [] (const CustomArg &customArg) {
|
httpserver.route("/check-custom-type/", [] (const CustomArg &customArg) {
|
||||||
return QString("data = %1").arg(customArg.data);
|
return QString("data = %1").arg(customArg.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
httpserver.route("/post-body", "POST", [] (const QHttpServerRequest &request) {
|
||||||
|
return request.body();
|
||||||
|
});
|
||||||
|
|
||||||
|
urlBase = QStringLiteral("http://localhost:%1%2").arg(httpserver.listen());
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QHttpServer::routeGet_data()
|
void tst_QHttpServer::routeGet_data()
|
||||||
@ -334,6 +340,38 @@ void tst_QHttpServer::routePost_data()
|
|||||||
<< "text/html"
|
<< "text/html"
|
||||||
<< ""
|
<< ""
|
||||||
<< "Hello world post";
|
<< "Hello world post";
|
||||||
|
|
||||||
|
QTest::addRow("post-and-get, post")
|
||||||
|
<< "/post-and-get"
|
||||||
|
<< 200
|
||||||
|
<< "text/html"
|
||||||
|
<< ""
|
||||||
|
<< "Hello world post";
|
||||||
|
|
||||||
|
QTest::addRow("any, post")
|
||||||
|
<< "/any"
|
||||||
|
<< 200
|
||||||
|
<< "text/html"
|
||||||
|
<< ""
|
||||||
|
<< "Post";
|
||||||
|
|
||||||
|
QTest::addRow("post-body")
|
||||||
|
<< "/post-body"
|
||||||
|
<< 200
|
||||||
|
<< "text/html"
|
||||||
|
<< "some post data"
|
||||||
|
<< "some post data";
|
||||||
|
|
||||||
|
QString body;
|
||||||
|
for (int i = 0; i < 10000; i++)
|
||||||
|
body.append(QString::number(i));
|
||||||
|
|
||||||
|
QTest::addRow("post-body - huge body, chunk test")
|
||||||
|
<< "/post-body"
|
||||||
|
<< 200
|
||||||
|
<< "text/html"
|
||||||
|
<< body
|
||||||
|
<< body;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QHttpServer::routePost()
|
void tst_QHttpServer::routePost()
|
||||||
@ -345,8 +383,11 @@ void tst_QHttpServer::routePost()
|
|||||||
QFETCH(QString, body);
|
QFETCH(QString, body);
|
||||||
|
|
||||||
QNetworkAccessManager networkAccessManager;
|
QNetworkAccessManager networkAccessManager;
|
||||||
const QUrl requestUrl(urlBase.arg(url));
|
QNetworkRequest request(QUrl(urlBase.arg(url)));
|
||||||
auto reply = networkAccessManager.post(QNetworkRequest(requestUrl), data.toUtf8());
|
if (data.size())
|
||||||
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/html");
|
||||||
|
|
||||||
|
auto reply = networkAccessManager.post(request, data.toUtf8());
|
||||||
|
|
||||||
QTRY_VERIFY(reply->isFinished());
|
QTRY_VERIFY(reply->isFinished());
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user