From f6c305d266f4b19a2639ed2a125f1e61016c7f76 Mon Sep 17 00:00:00 2001 From: Chunting Gu Date: Tue, 19 Mar 2019 16:38:29 +0800 Subject: [PATCH] Add keep_alive() to HttpClientArgs --- examples/http_client.cc | 3 +-- webcc/http_client_session.cc | 5 +++++ webcc/http_request_args.h | 10 +++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/examples/http_client.cc b/examples/http_client.cc index 954ca61..ad191f3 100644 --- a/examples/http_client.cc +++ b/examples/http_client.cc @@ -93,8 +93,7 @@ void ExampleKeepAlive(const std::string& url) { // Close session.Request(webcc::HttpRequestArgs("GET").url(url). - ssl_verify(kSslVerify). - headers({"Connection", "Close"})); + ssl_verify(kSslVerify).keep_alive(false)); // Keep-Alive session.Request(webcc::HttpRequestArgs("GET").url(url). diff --git a/webcc/http_client_session.cc b/webcc/http_client_session.cc index 76ef40d..fa0f539 100644 --- a/webcc/http_client_session.cc +++ b/webcc/http_client_session.cc @@ -71,6 +71,11 @@ HttpResponsePtr HttpClientSession::Request(HttpRequestArgs&& args) { std::move(args.headers_[i])); } + // No keep-alive? + if (!args.keep_alive_) { + request.SetHeader(http::headers::kConnection, "Close"); + } + request.Prepare(); bool ssl_verify = GetSslVerify(ssl_verify_, args.ssl_verify_); diff --git a/webcc/http_request_args.h b/webcc/http_request_args.h index 8479b87..f32f879 100644 --- a/webcc/http_request_args.h +++ b/webcc/http_request_args.h @@ -19,7 +19,7 @@ class HttpClientSession; class HttpRequestArgs { public: explicit HttpRequestArgs(const std::string& method = "") - : method_(method), json_(false), buffer_size_(0) { + : method_(method), json_(false), buffer_size_(0), keep_alive_(true) { } HttpRequestArgs(const HttpRequestArgs&) = default; @@ -83,6 +83,11 @@ public: return std::move(*this); } + HttpRequestArgs&& keep_alive(bool keep_alive) { + keep_alive_ = keep_alive; + return std::move(*this); + } + private: friend class HttpClientSession; @@ -108,6 +113,9 @@ private: // Size of the buffer to read response. // Leave it to 0 for using default value. std::size_t buffer_size_; + + // Persistent connection. + bool keep_alive_; }; } // namespace webcc