- // Set POST (or GET) data
- if (request.post_fields.empty()) {
- curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
- } else if (request.multipart) {
- curl_httppost *last = NULL;
- for (std::map<std::string, std::string>::iterator it =
- request.post_fields.begin();
- it != request.post_fields.end();
- ++it) {
- curl_formadd(&post, &last,
- CURLFORM_NAMELENGTH, it->first.size(),
- CURLFORM_PTRNAME, it->first.c_str(),
- CURLFORM_CONTENTSLENGTH, it->second.size(),
- CURLFORM_PTRCONTENTS, it->second.c_str(),
- CURLFORM_END);
- }
- curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
- // request.post_fields must now *never* be
- // modified until CURLOPT_HTTPPOST is cleared
- } else {
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- if (request.post_data.empty()) {
- std::string str;
- for (std::map<std::string, std::string>::iterator it =
- request.post_fields.begin();
- it != request.post_fields.end();
- ++it) {
- if (str != "")
- str += "&";
- str += urlencode(it->first);
- str += "=";
- str += urlencode(it->second);
- }
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE,
- str.size());
- curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS,
- str.c_str());
- } else {
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE,
- request.post_data.size());
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS,
- request.post_data.c_str());
- // request.post_data must now *never* be
- // modified until CURLOPT_POSTFIELDS is cleared
- }
- }
- // Set additional HTTP headers
- for (size_t i = 0; i < request.extra_headers.size(); ++i) {
- httpheader = curl_slist_append(
- httpheader,
- request.extra_headers[i].c_str());
- }
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, httpheader);