From 28f408529166fad6df4d701cc692cb557e77570e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20M=C3=BCller?= Date: Thu, 13 Feb 2025 18:04:53 +0100 Subject: [PATCH 01/12] remove content --- CMakeLists.txt | 1 + cpr/session.cpp | 21 ++++++++++++++++ include/cpr/session.h | 5 +++- test/httpServer.cpp | 13 ++++++++++ test/session_tests.cpp | 56 ++++++++++++++++++++++++++++++++++-------- 5 files changed, 85 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 30208bcd5..4475298d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME}) set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake") set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # generate compile_commands.json to be used by other tools (e.g. vs code) else() # Check required c++ standard of parent project if(CMAKE_CXX_STANDARD) diff --git a/cpr/session.cpp b/cpr/session.cpp index 34050f376..c8cc112ec 100644 --- a/cpr/session.cpp +++ b/cpr/session.cpp @@ -268,6 +268,27 @@ void Session::SetLimitRate(const LimitRate& limit_rate) { curl_easy_setopt(curl_->handle, CURLOPT_MAX_SEND_SPEED_LARGE, limit_rate.uprate); } +const Content& Session::GetContent() const { + return content_; +} + +void Session::RemoveContent() { + if (std::holds_alternative(content_)) { + curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); + curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, NULL); + } else if (std::holds_alternative(content_)) { + curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); + curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, NULL); + } else if (std::holds_alternative(content_)) { + // Make sure, we have a empty multipart to start with: + if (curl_->multipart) { + curl_mime_free(curl_->multipart); + curl_->multipart = nullptr; + } + } + content_ = std::monostate{}; +} + void Session::SetReadCallback(const ReadCallback& read) { cbs_->readcb_ = read; curl_easy_setopt(curl_->handle, CURLOPT_INFILESIZE_LARGE, read.size); diff --git a/include/cpr/session.h b/include/cpr/session.h index db61e2109..f0747398a 100644 --- a/include/cpr/session.h +++ b/include/cpr/session.h @@ -46,6 +46,7 @@ namespace cpr { using AsyncResponse = AsyncWrapper; +using Content = std::variant; class Interceptor; class MultiPerform; @@ -111,6 +112,8 @@ class Session : public std::enable_shared_from_this { void SetAcceptEncoding(const AcceptEncoding& accept_encoding); void SetAcceptEncoding(AcceptEncoding&& accept_encoding); void SetLimitRate(const LimitRate& limit_rate); + [[nodiscard]] const Content& GetContent() const; + void RemoveContent(); // For cancellable requests void SetCancellationParam(std::shared_ptr param); @@ -237,7 +240,7 @@ class Session : public std::enable_shared_from_this { bool chunkedTransferEncoding_{false}; - std::variant content_{std::monostate{}}; + Content content_{std::monostate{}}; std::shared_ptr curl_; Url url_; Parameters parameters_; diff --git a/test/httpServer.cpp b/test/httpServer.cpp index 249ce76db..2496cff62 100644 --- a/test/httpServer.cpp +++ b/test/httpServer.cpp @@ -852,6 +852,19 @@ void HttpServer::OnRequestGetDownloadFileLength(mg_connection* conn, mg_http_mes void HttpServer::OnRequest(mg_connection* conn, mg_http_message* msg) { std::string uri = std::string(msg->uri.ptr, msg->uri.len); + + if (std::string_view{msg->method.ptr, msg->method.len} == "GET") { + if (msg->body.len > 0) { + std::string errorMessage{"Bad Request: GET shouldn't contain a body."}; + SendError(conn, 400, errorMessage); + return; + } else if (msg->chunk.len > 0) { + std::string errorMessage{"Bad Request: GET shouldn't contain a body."}; + SendError(conn, 400, errorMessage); + return; + } + } + if (uri == "/") { OnRequestRoot(conn, msg); } else if (uri == "/hello.html") { diff --git a/test/session_tests.cpp b/test/session_tests.cpp index 28f663f30..cd162cbde 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -1,9 +1,10 @@ #include +#include #include #include #include +#include -#include #include #include @@ -1001,13 +1002,52 @@ TEST(DifferentMethodTests, MultipleGetPostTest) { } } +void PrintContentType(const std::variant& content) { + if (std::holds_alternative(content)) { + std::cout << "std::monostate" << std::endl; + } else if (std::holds_alternative(content)) { + std::cout << "cpr::Payload" << std::endl; + } else if (std::holds_alternative(content)) { + std::cout << "cpr::Body" << std::endl; + } else if (std::holds_alternative(content)) { + std::cout << "cpr::Multipart" << std::endl; + } else { + std::cout << "unknown content type" << std::endl; + } +} + TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { Url url{server->GetBaseUrl() + "/header_reflect.html"}; Url urlPost{server->GetBaseUrl() + "/post_reflect.html"}; Url urlPut{server->GetBaseUrl() + "/put.html"}; + Url urlMultipartPost{server->GetBaseUrl() + "/post_file_upload.html"}; Session session; for (size_t i = 0; i < 10; ++i) { { + session.RemoveContent(); + session.SetUrl(url); + Response response = session.Get(); + std::string expected_text{"Header reflect GET"}; + EXPECT_EQ(expected_text, response.text); + EXPECT_EQ(url, response.url); + EXPECT_EQ(200, response.status_code); + EXPECT_EQ(ErrorCode::OK, response.error.code); + } + { + session.RemoveContent(); + session.SetUrl(urlMultipartPost); + std::string fileContentsBinary{"kn3d0c9j213riknmfd039dj10idn2309cmxkle2rsdj0239mdf"}; + std::string fileExtension = ".myfile"; + session.SetMultipart(cpr::Multipart{{"files", cpr::Buffer{fileContentsBinary.begin(), fileContentsBinary.end(), "myfile.jpg"}}, {"file_types", "[\"" + fileExtension + "\"]"}}); + Response response = session.Post(); + std::string expected_text{"{\n \"files\": \"myfile.jpg=kn3d0c9j213riknmfd039dj10idn2309cmxkle2rsdj0239mdf\",\n \"file_types\": \"[\".myfile\"]\"\n}"}; + EXPECT_EQ(expected_text, response.text); + EXPECT_EQ(urlMultipartPost, response.url); + EXPECT_EQ(201, response.status_code); + EXPECT_EQ(ErrorCode::OK, response.error.code); + } + { + session.RemoveContent(); session.SetUrl(url); Response response = session.Delete(); std::string expected_text{"Header reflect DELETE"}; @@ -1017,6 +1057,7 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(ErrorCode::OK, response.error.code); } { + PrintContentType(session.GetContent()); session.SetUrl(urlPost); std::string expectedBody = "a1b2c3Post"; session.SetBody(expectedBody); @@ -1026,16 +1067,9 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(200, response.status_code); EXPECT_EQ(ErrorCode::OK, response.error.code); } + { - session.SetUrl(url); - Response response = session.Get(); - std::string expected_text{"Header reflect GET"}; - EXPECT_EQ(expected_text, response.text); - EXPECT_EQ(url, response.url); - EXPECT_EQ(200, response.status_code); - EXPECT_EQ(ErrorCode::OK, response.error.code); - } - { + PrintContentType(session.GetContent()); session.SetUrl(urlPut); session.SetPayload({{"x", "5"}}); Response response = session.Put(); @@ -1050,6 +1084,8 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(ErrorCode::OK, response.error.code); } { + session.RemoveContent(); + PrintContentType(session.GetContent()); session.SetUrl(url); Response response = session.Head(); std::string expected_text{"Header reflect HEAD"}; From 509c66f8b4e07b9969c0f7359ac8ec5f1f507033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20M=C3=BCller?= Date: Thu, 13 Feb 2025 18:21:12 +0100 Subject: [PATCH 02/12] moved GET body check to header reflect method --- test/httpServer.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/httpServer.cpp b/test/httpServer.cpp index 2496cff62..cbe8ed901 100644 --- a/test/httpServer.cpp +++ b/test/httpServer.cpp @@ -272,6 +272,18 @@ void HttpServer::OnRequestBasicJson(mg_connection* conn, mg_http_message* /*msg* } void HttpServer::OnRequestHeaderReflect(mg_connection* conn, mg_http_message* msg) { + if (std::string_view{msg->method.ptr, msg->method.len} == "GET") { + if (msg->body.len > 0) { + std::string errorMessage{"Bad Request: GET shouldn't contain a body."}; + SendError(conn, 400, errorMessage); + return; + } else if (msg->chunk.len > 0) { + std::string errorMessage{"Bad Request: GET shouldn't contain a body."}; + SendError(conn, 400, errorMessage); + return; + } + } + std::string response = "Header reflect " + std::string{msg->method.ptr, msg->method.len}; std::string headers; bool hasContentTypeHeader = false; @@ -853,18 +865,6 @@ void HttpServer::OnRequestGetDownloadFileLength(mg_connection* conn, mg_http_mes void HttpServer::OnRequest(mg_connection* conn, mg_http_message* msg) { std::string uri = std::string(msg->uri.ptr, msg->uri.len); - if (std::string_view{msg->method.ptr, msg->method.len} == "GET") { - if (msg->body.len > 0) { - std::string errorMessage{"Bad Request: GET shouldn't contain a body."}; - SendError(conn, 400, errorMessage); - return; - } else if (msg->chunk.len > 0) { - std::string errorMessage{"Bad Request: GET shouldn't contain a body."}; - SendError(conn, 400, errorMessage); - return; - } - } - if (uri == "/") { OnRequestRoot(conn, msg); } else if (uri == "/hello.html") { From 6dc43388f38c77f28a1e9727fd551f1bba8c2e6d Mon Sep 17 00:00:00 2001 From: Simon Mueller Date: Fri, 14 Feb 2025 12:13:21 +0100 Subject: [PATCH 03/12] clang-format; span include --- cpr/curlholder.cpp | 2 +- cpr/session.cpp | 5 +---- test/session_tests.cpp | 1 - 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/cpr/curlholder.cpp b/cpr/curlholder.cpp index 48a6b1e39..3e80ad17e 100644 --- a/cpr/curlholder.cpp +++ b/cpr/curlholder.cpp @@ -1,9 +1,9 @@ #include "cpr/curlholder.h" +#include "cpr/secure_string.h" #include #include #include #include -#include "cpr/secure_string.h" namespace cpr { CurlHolder::CurlHolder() { diff --git a/cpr/session.cpp b/cpr/session.cpp index c8cc112ec..ef70635e6 100644 --- a/cpr/session.cpp +++ b/cpr/session.cpp @@ -273,10 +273,7 @@ const Content& Session::GetContent() const { } void Session::RemoveContent() { - if (std::holds_alternative(content_)) { - curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); - curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, NULL); - } else if (std::holds_alternative(content_)) { + if (std::holds_alternative(content_) || std::holds_alternative(content_)) { curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, NULL); } else if (std::holds_alternative(content_)) { diff --git a/test/session_tests.cpp b/test/session_tests.cpp index cd162cbde..afdf29f43 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include From c1a9c8cbf000d6ccf46745fefa6a61fa421ced1d Mon Sep 17 00:00:00 2001 From: Simon Mueller Date: Fri, 14 Feb 2025 12:18:45 +0100 Subject: [PATCH 04/12] fixed prepare test --- test/prepare_tests.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/prepare_tests.cpp b/test/prepare_tests.cpp index 722b2815b..51d45196d 100644 --- a/test/prepare_tests.cpp +++ b/test/prepare_tests.cpp @@ -68,6 +68,7 @@ TEST(PrepareTests, MultipleDeleteHeadPutGetPostTest) { Session session; for (size_t i = 0; i < 3; ++i) { { + session.RemoveContent(); session.SetUrl(url); session.PrepareDelete(); CURLcode curl_result = curl_easy_perform(session.GetCurlHolder()->handle); @@ -91,6 +92,7 @@ TEST(PrepareTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(ErrorCode::OK, response.error.code); } { + session.RemoveContent(); session.SetUrl(url); session.PrepareGet(); CURLcode curl_result = curl_easy_perform(session.GetCurlHolder()->handle); @@ -118,6 +120,7 @@ TEST(PrepareTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(ErrorCode::OK, response.error.code); } { + session.RemoveContent(); session.SetUrl(url); session.PrepareHead(); CURLcode curl_result = curl_easy_perform(session.GetCurlHolder()->handle); From 4ae9736f2d2e6dda9e77080f20ec8c31e8abaef5 Mon Sep 17 00:00:00 2001 From: Simon Mueller Date: Fri, 14 Feb 2025 13:22:02 +0100 Subject: [PATCH 05/12] cppcheck finding --- cpr/session.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpr/session.cpp b/cpr/session.cpp index ef70635e6..df87ce29d 100644 --- a/cpr/session.cpp +++ b/cpr/session.cpp @@ -275,7 +275,7 @@ const Content& Session::GetContent() const { void Session::RemoveContent() { if (std::holds_alternative(content_) || std::holds_alternative(content_)) { curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); - curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, NULL); + curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, nullptr); } else if (std::holds_alternative(content_)) { // Make sure, we have a empty multipart to start with: if (curl_->multipart) { From d1857059d6b5989455b11dbc5b6cab31f52b5887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20M=C3=BCller?= <17151282+simue@users.noreply.github.com> Date: Sun, 16 Feb 2025 17:51:23 +0100 Subject: [PATCH 06/12] added inline docu --- cpr/session.cpp | 6 +++++- test/session_tests.cpp | 17 ----------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/cpr/session.cpp b/cpr/session.cpp index df87ce29d..897475369 100644 --- a/cpr/session.cpp +++ b/cpr/session.cpp @@ -273,16 +273,20 @@ const Content& Session::GetContent() const { } void Session::RemoveContent() { + // inverse function to prepareBodyPayloadOrMultipart() if (std::holds_alternative(content_) || std::holds_alternative(content_)) { + // set default values, so curl does not send a body in subsequent requests curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, nullptr); } else if (std::holds_alternative(content_)) { // Make sure, we have a empty multipart to start with: if (curl_->multipart) { + // remove multipart data curl_mime_free(curl_->multipart); curl_->multipart = nullptr; } } + // no content content_ = std::monostate{}; } @@ -948,7 +952,7 @@ const std::optional Session::intercept() { } void Session::prepareBodyPayloadOrMultipart() const { - // Either a body, multipart or a payload is allowed. + // Either a body, multipart or a payload is allowed. Inverse function to RemoveContent() if (std::holds_alternative(content_)) { const std::string payload = std::get(content_).GetContent(*curl_); diff --git a/test/session_tests.cpp b/test/session_tests.cpp index afdf29f43..1bf0052f1 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -1001,20 +1001,6 @@ TEST(DifferentMethodTests, MultipleGetPostTest) { } } -void PrintContentType(const std::variant& content) { - if (std::holds_alternative(content)) { - std::cout << "std::monostate" << std::endl; - } else if (std::holds_alternative(content)) { - std::cout << "cpr::Payload" << std::endl; - } else if (std::holds_alternative(content)) { - std::cout << "cpr::Body" << std::endl; - } else if (std::holds_alternative(content)) { - std::cout << "cpr::Multipart" << std::endl; - } else { - std::cout << "unknown content type" << std::endl; - } -} - TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { Url url{server->GetBaseUrl() + "/header_reflect.html"}; Url urlPost{server->GetBaseUrl() + "/post_reflect.html"}; @@ -1056,7 +1042,6 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(ErrorCode::OK, response.error.code); } { - PrintContentType(session.GetContent()); session.SetUrl(urlPost); std::string expectedBody = "a1b2c3Post"; session.SetBody(expectedBody); @@ -1068,7 +1053,6 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { } { - PrintContentType(session.GetContent()); session.SetUrl(urlPut); session.SetPayload({{"x", "5"}}); Response response = session.Put(); @@ -1084,7 +1068,6 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { } { session.RemoveContent(); - PrintContentType(session.GetContent()); session.SetUrl(url); Response response = session.Head(); std::string expected_text{"Header reflect HEAD"}; From e05095eadab22781b7003c185c89ddc557810521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20M=C3=BCller?= <17151282+simue@users.noreply.github.com> Date: Mon, 17 Feb 2025 10:54:13 +0100 Subject: [PATCH 07/12] added doc to header --- cpr/session.cpp | 2 -- include/cpr/session.h | 9 +++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cpr/session.cpp b/cpr/session.cpp index 897475369..27a7d2b6d 100644 --- a/cpr/session.cpp +++ b/cpr/session.cpp @@ -279,14 +279,12 @@ void Session::RemoveContent() { curl_easy_setopt(curl_->handle, CURLOPT_POSTFIELDSIZE_LARGE, -1); curl_easy_setopt(curl_->handle, CURLOPT_COPYPOSTFIELDS, nullptr); } else if (std::holds_alternative(content_)) { - // Make sure, we have a empty multipart to start with: if (curl_->multipart) { // remove multipart data curl_mime_free(curl_->multipart); curl_->multipart = nullptr; } } - // no content content_ = std::monostate{}; } diff --git a/include/cpr/session.h b/include/cpr/session.h index f0747398a..d4204f614 100644 --- a/include/cpr/session.h +++ b/include/cpr/session.h @@ -112,7 +112,16 @@ class Session : public std::enable_shared_from_this { void SetAcceptEncoding(const AcceptEncoding& accept_encoding); void SetAcceptEncoding(AcceptEncoding&& accept_encoding); void SetLimitRate(const LimitRate& limit_rate); + + /** + * Returns a reference to the content sent in previous request + */ [[nodiscard]] const Content& GetContent() const; + + /** + * Removes the content sent in previous request, so it will not be sent with the next request + * Call this before doing a request that is specified not to send a body, e.g. GET + */ void RemoveContent(); // For cancellable requests From acb40ad4c2425b6de7d313d02934eb7c9b9970a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20M=C3=BCller?= <17151282+simue@users.noreply.github.com> Date: Mon, 17 Feb 2025 10:56:09 +0100 Subject: [PATCH 08/12] docs --- include/cpr/session.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cpr/session.h b/include/cpr/session.h index d4204f614..942cb1306 100644 --- a/include/cpr/session.h +++ b/include/cpr/session.h @@ -119,7 +119,7 @@ class Session : public std::enable_shared_from_this { [[nodiscard]] const Content& GetContent() const; /** - * Removes the content sent in previous request, so it will not be sent with the next request + * Removes the content sent in previous request from internal state, so it will not be sent with the next request * Call this before doing a request that is specified not to send a body, e.g. GET */ void RemoveContent(); From b2613dc0f9eac0dff49aba120e33b133e6f2a871 Mon Sep 17 00:00:00 2001 From: Simon Mueller Date: Tue, 18 Feb 2025 14:26:09 +0100 Subject: [PATCH 09/12] re-added missing GET request --- test/session_tests.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/session_tests.cpp b/test/session_tests.cpp index 1bf0052f1..5485e0dec 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -1051,7 +1051,16 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { EXPECT_EQ(200, response.status_code); EXPECT_EQ(ErrorCode::OK, response.error.code); } - + { + session.RemoveContent(); + session.SetUrl(url); + Response response = session.Get(); + std::string expected_text{"Header reflect GET"}; + EXPECT_EQ(expected_text, response.text); + EXPECT_EQ(url, response.url); + EXPECT_EQ(200, response.status_code); + EXPECT_EQ(ErrorCode::OK, response.error.code); + } { session.SetUrl(urlPut); session.SetPayload({{"x", "5"}}); From 84a89bc6e65f07c9be64b2860441da0e3d85f80d Mon Sep 17 00:00:00 2001 From: simue <17151282+simue@users.noreply.github.com> Date: Tue, 18 Feb 2025 20:30:26 +0100 Subject: [PATCH 10/12] Update include/cpr/session.h Co-authored-by: Fabian Sauter --- include/cpr/session.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/cpr/session.h b/include/cpr/session.h index 942cb1306..b3eefb0bf 100644 --- a/include/cpr/session.h +++ b/include/cpr/session.h @@ -114,8 +114,8 @@ class Session : public std::enable_shared_from_this { void SetLimitRate(const LimitRate& limit_rate); /** - * Returns a reference to the content sent in previous request - */ + * Returns a reference to the content sent in previous request. + **/ [[nodiscard]] const Content& GetContent() const; /** From 461953b13a5028b79961b1ee5d973492e45a860b Mon Sep 17 00:00:00 2001 From: simue <17151282+simue@users.noreply.github.com> Date: Tue, 18 Feb 2025 20:30:50 +0100 Subject: [PATCH 11/12] Update include/cpr/session.h Co-authored-by: Fabian Sauter --- include/cpr/session.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/cpr/session.h b/include/cpr/session.h index b3eefb0bf..93b034838 100644 --- a/include/cpr/session.h +++ b/include/cpr/session.h @@ -119,9 +119,9 @@ class Session : public std::enable_shared_from_this { [[nodiscard]] const Content& GetContent() const; /** - * Removes the content sent in previous request from internal state, so it will not be sent with the next request - * Call this before doing a request that is specified not to send a body, e.g. GET - */ + * Removes the content sent in previous request from internal state, so it will not be sent with the next request. + * Call this before doing a request that is specified not to send a body, e.g. GET. + **/ void RemoveContent(); // For cancellable requests From 4353d0b09dced0f5d59f1d9cc2a94f3189e568b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20M=C3=BCller?= <17151282+simue@users.noreply.github.com> Date: Tue, 18 Feb 2025 21:01:08 +0100 Subject: [PATCH 12/12] removed dubious string in test --- test/session_tests.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/session_tests.cpp b/test/session_tests.cpp index 5485e0dec..589c49500 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -1021,11 +1021,11 @@ TEST(DifferentMethodTests, MultipleDeleteHeadPutGetPostTest) { { session.RemoveContent(); session.SetUrl(urlMultipartPost); - std::string fileContentsBinary{"kn3d0c9j213riknmfd039dj10idn2309cmxkle2rsdj0239mdf"}; + std::string fileContentsBinary{"this is a binary payload"}; std::string fileExtension = ".myfile"; session.SetMultipart(cpr::Multipart{{"files", cpr::Buffer{fileContentsBinary.begin(), fileContentsBinary.end(), "myfile.jpg"}}, {"file_types", "[\"" + fileExtension + "\"]"}}); Response response = session.Post(); - std::string expected_text{"{\n \"files\": \"myfile.jpg=kn3d0c9j213riknmfd039dj10idn2309cmxkle2rsdj0239mdf\",\n \"file_types\": \"[\".myfile\"]\"\n}"}; + std::string expected_text{"{\n \"files\": \"myfile.jpg=this is a binary payload\",\n \"file_types\": \"[\".myfile\"]\"\n}"}; EXPECT_EQ(expected_text, response.text); EXPECT_EQ(urlMultipartPost, response.url); EXPECT_EQ(201, response.status_code);