@@ -294,13 +294,11 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_,
294
294
curl_easy_setopt (curl, CURLOPT_WRITEDATA, &oss);
295
295
}
296
296
297
- // Set POST (or GET) data
298
- if (request.post_fields .empty () && request.post_data .empty ()) {
299
- curl_easy_setopt (curl, CURLOPT_HTTPGET, 1 );
300
- } else if (request.multipart ) {
297
+ // Set data from fields or raw_data
298
+ if (request.multipart ) {
301
299
curl_httppost *last = NULL ;
302
- for (StringMap::iterator it = request.post_fields .begin ();
303
- it != request.post_fields .end (); ++it) {
300
+ for (StringMap::iterator it = request.fields .begin ();
301
+ it != request.fields .end (); ++it) {
304
302
curl_formadd (&post, &last,
305
303
CURLFORM_NAMELENGTH, it->first .size (),
306
304
CURLFORM_PTRNAME, it->first .c_str (),
@@ -311,28 +309,42 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_,
311
309
curl_easy_setopt (curl, CURLOPT_HTTPPOST, post);
312
310
// request.post_fields must now *never* be
313
311
// modified until CURLOPT_HTTPPOST is cleared
314
- } else if (request.post_data .empty ()) {
315
- curl_easy_setopt (curl, CURLOPT_POST, 1 );
316
- std::string str;
317
- for (auto &post_field : request.post_fields ) {
318
- if (!str.empty ())
319
- str += " &" ;
320
- str += urlencode (post_field.first );
321
- str += " =" ;
322
- str += urlencode (post_field.second );
323
- }
324
- curl_easy_setopt (curl, CURLOPT_POSTFIELDSIZE,
325
- str.size ());
326
- curl_easy_setopt (curl, CURLOPT_COPYPOSTFIELDS,
327
- str.c_str ());
328
312
} else {
329
- curl_easy_setopt (curl, CURLOPT_POST, 1 );
330
- curl_easy_setopt (curl, CURLOPT_POSTFIELDSIZE,
331
- request.post_data .size ());
332
- curl_easy_setopt (curl, CURLOPT_POSTFIELDS,
333
- request.post_data .c_str ());
334
- // request.post_data must now *never* be
335
- // modified until CURLOPT_POSTFIELDS is cleared
313
+ switch (request.method ) {
314
+ case HTTP_GET:
315
+ curl_easy_setopt (curl, CURLOPT_HTTPGET, 1 );
316
+ break ;
317
+ case HTTP_POST:
318
+ curl_easy_setopt (curl, CURLOPT_POST, 1 );
319
+ break ;
320
+ case HTTP_PUT:
321
+ curl_easy_setopt (curl, CURLOPT_CUSTOMREQUEST, " PUT" );
322
+ break ;
323
+ case HTTP_DELETE:
324
+ curl_easy_setopt (curl, CURLOPT_CUSTOMREQUEST, " DELETE" );
325
+ break ;
326
+ }
327
+ if (request.method != HTTP_GET) {
328
+ if (!request.raw_data .empty ()) {
329
+ curl_easy_setopt (curl, CURLOPT_POSTFIELDSIZE,
330
+ request.raw_data .size ());
331
+ curl_easy_setopt (curl, CURLOPT_POSTFIELDS,
332
+ request.raw_data .c_str ());
333
+ } else if (!request.fields .empty ()) {
334
+ std::string str;
335
+ for (auto &field : request.fields ) {
336
+ if (!str.empty ())
337
+ str += " &" ;
338
+ str += urlencode (field.first );
339
+ str += " =" ;
340
+ str += urlencode (field.second );
341
+ }
342
+ curl_easy_setopt (curl, CURLOPT_POSTFIELDSIZE,
343
+ str.size ());
344
+ curl_easy_setopt (curl, CURLOPT_COPYPOSTFIELDS,
345
+ str.c_str ());
346
+ }
347
+ }
336
348
}
337
349
// Set additional HTTP headers
338
350
for (const std::string &extra_header : request.extra_headers ) {
0 commit comments