fix(Http): send body content for PATCH, DELETE and OPTIONS methods if exists

while here:
- use CURLOPT_UPLOAD instead of CURLOPT_PUT as the latter is depracated
This commit is contained in:
Tomasz Sowa 2023-09-26 23:02:34 +02:00
parent 79e971cb76
commit 5e45ad3417
Signed by: tomasz.sowa
GPG Key ID: 662CC1438638588B
2 changed files with 18 additions and 9 deletions

View File

@ -521,7 +521,7 @@ void Http::add_additional_space_headers()
header << value->value.value_wstring;
}
else
if( value->is_str() )
if( value->is_str() )
{
header << value->value.value_string;
}
@ -670,7 +670,7 @@ bool Http::fetch_internal(Method method, const char * url, const std::string * i
read_function_input = in; // can be null
read_function_index = 0;
put_method(method);
put_method(method, in);
if( read_function_input )
{
@ -784,18 +784,27 @@ bool Http::fetch_internal(Method method, const char * url, const std::string * i
}
void Http::put_method(Method & method)
// we don't put 'get' here
void Http::put_method(Method & method, const std::string * in)
{
// we don't put 'get' here
if( method == Method::method_put || method == Method::method_patch ||
method == Method::method_delete || method == Method::method_options )
{
if( in )
{
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, in->size());
}
}
switch(method)
{
case Method::method_post:
curl_easy_setopt(curl, CURLOPT_POST, 1);
break;
curl_easy_setopt(curl, CURLOPT_POST, 1L);
if( in )
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, in->size());
case Method::method_put:
curl_easy_setopt(curl, CURLOPT_PUT, 1);
break;
case Method::method_patch:

View File

@ -346,7 +346,7 @@ private:
std::string temp_header_value_ascii;
bool fetch_internal(Method method, const char * url, const std::string * in, pt::TextStream & out);
void put_method(Method & method);
void put_method(Method & method, const std::string * in);
static size_t fetch_read_function(char * ptr, size_t size, size_t nmemb, void * userdata);
static int fetch_seek_set(Http * http, curl_off_t offset);
static int fetch_seek_cur(Http * http, curl_off_t offset);