@@ -135,7 +135,8 @@ Status HandleFailureResponse(const cpr::Response& response,
135135} // namespace
136136
137137void HttpClient::PrepareSession (
138- const std::string& path, const std::unordered_map<std::string, std::string>& params,
138+ const std::string& path, const HttpMethod& method,
139+ const std::unordered_map<std::string, std::string>& params,
139140 const std::unordered_map<std::string, std::string>& headers) {
140141 session_->SetUrl (cpr::Url{path});
141142 session_->SetParameters (GetParameters (params));
@@ -144,6 +145,23 @@ void HttpClient::PrepareSession(
144145 // to 1 by POST requests, and this state is not reset by RemoveContent(), so we must
145146 // manually enforce HTTP GET to clear it.
146147 curl_easy_setopt (session_->GetCurlHolder ()->handle , CURLOPT_HTTPGET, 1L );
148+ switch (method) {
149+ case HttpMethod::kGet :
150+ session_->PrepareGet ();
151+ break ;
152+ case HttpMethod::kPost :
153+ session_->PreparePost ();
154+ break ;
155+ case HttpMethod::kPut :
156+ session_->PreparePut ();
157+ break ;
158+ case HttpMethod::kDelete :
159+ session_->PrepareDelete ();
160+ break ;
161+ case HttpMethod::kHead :
162+ session_->PrepareHead ();
163+ break ;
164+ }
147165 auto final_headers = MergeHeaders (default_headers_, headers);
148166 session_->SetHeader (final_headers);
149167}
@@ -167,7 +185,7 @@ Result<HttpResponse> HttpClient::Get(
167185 cpr::Response response;
168186 {
169187 std::lock_guard guard (session_mutex_);
170- PrepareSession (path, params, headers);
188+ PrepareSession (path, HttpMethod:: kGet , params, headers);
171189 response = session_->Get ();
172190 }
173191
@@ -184,7 +202,7 @@ Result<HttpResponse> HttpClient::Post(
184202 cpr::Response response;
185203 {
186204 std::lock_guard guard (session_mutex_);
187- PrepareSession (path, /* params=*/ {}, headers);
205+ PrepareSession (path, HttpMethod:: kPost , /* params=*/ {}, headers);
188206 session_->SetBody (cpr::Body{body});
189207 response = session_->Post ();
190208 }
@@ -209,7 +227,7 @@ Result<HttpResponse> HttpClient::PostForm(
209227 auto form_headers = headers;
210228 form_headers[kHeaderContentType ] = kMimeTypeFormUrlEncoded ;
211229
212- PrepareSession (path, /* params=*/ {}, form_headers);
230+ PrepareSession (path, HttpMethod:: kPost , /* params=*/ {}, form_headers);
213231 std::vector<cpr::Pair> pair_list;
214232 pair_list.reserve (form_data.size ());
215233 for (const auto & [key, val] : form_data) {
@@ -232,7 +250,7 @@ Result<HttpResponse> HttpClient::Head(
232250 cpr::Response response;
233251 {
234252 std::lock_guard guard (session_mutex_);
235- PrepareSession (path, /* params=*/ {}, headers);
253+ PrepareSession (path, HttpMethod:: kHead , /* params=*/ {}, headers);
236254 response = session_->Head ();
237255 }
238256
@@ -249,7 +267,7 @@ Result<HttpResponse> HttpClient::Delete(
249267 cpr::Response response;
250268 {
251269 std::lock_guard guard (session_mutex_);
252- PrepareSession (path, params, headers);
270+ PrepareSession (path, HttpMethod:: kDelete , params, headers);
253271 response = session_->Delete ();
254272 }
255273
0 commit comments