From d043b180977477c9201f4122fe99147371d1d379 Mon Sep 17 00:00:00 2001 From: Daniel Ottiger Date: Thu, 7 May 2020 14:31:14 +0200 Subject: [PATCH] keepalive: support multiple post using content provider (#461) --- httplib.h | 15 +++++++++++++++ test/test.cc | 5 +++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/httplib.h b/httplib.h index a14afb8..d82fab6 100644 --- a/httplib.h +++ b/httplib.h @@ -855,6 +855,21 @@ inline void Post(std::vector &requests, const char *path, Post(requests, path, Headers(), body, content_type); } +inline void Post(std::vector &requests, + const char *path, size_t content_length, + ContentProvider content_provider, const char *content_type) { + Request req; + req.method = "POST"; + req.headers = Headers(); + req.path = path; + req.content_length = content_length; + req.content_provider = content_provider; + + if (content_type) { req.headers.emplace("Content-Type", content_type); } + + requests.emplace_back(std::move(req)); +} + #ifdef CPPHTTPLIB_OPENSSL_SUPPORT class SSLServer : public Server { public: diff --git a/test/test.cc b/test/test.cc index 9193d30..7151a42 100644 --- a/test/test.cc +++ b/test/test.cc @@ -2088,6 +2088,7 @@ TEST_F(ServerTest, KeepAlive) { Get(requests, "/hi"); Get(requests, "/not-exist"); Post(requests, "/empty", "", "text/plain"); + Post(requests, "/empty", 0, [&](size_t offset, size_t length, httplib::DataSink &sink){}, "text/plain"); std::vector responses; auto ret = cli_.send(requests, responses); @@ -2107,8 +2108,8 @@ TEST_F(ServerTest, KeepAlive) { EXPECT_EQ(404, res.status); } - { - auto &res = responses[4]; + for (size_t i = 4; i < 6; i++) { + auto &res = responses[i]; EXPECT_EQ(200, res.status); EXPECT_EQ("text/plain", res.get_header_value("Content-Type")); EXPECT_EQ("empty", res.body);