WebRequest::WebRequest(Context* context, const String& verb, const String& url, double requestContentSize) : Object(context), is_(new WebRequestInternalState(*this)) { is_->url = url.Trimmed(); is_->verb = verb; is_->upload = new BufferQueue(context); is_->download = new BufferQueue(context); is_->state = HTTP_INITIALIZING; is_->curlm = NULL; is_->curl = NULL; is_->requestContentSize = curl_off_t(std::floor(requestContentSize)); is_->isAborted = false; is_->isAddedToMulti = false; }
Response * CURLSession::post(const POSTRequest & request) { setup(request); struct curl_slist * headers = NULL; BOOST_SCOPE_EXIT((headers)) { if(headers) { curl_slist_free_all(headers); } } BOOST_SCOPE_EXIT_END if(m_curl) { curl_easy_setopt(m_curl, CURLOPT_POST, 1L); curl_easy_setopt(m_curl, CURLOPT_POSTFIELDS, request.data().c_str()); curl_easy_setopt(m_curl, CURLOPT_INFILESIZE_LARGE, curl_off_t(request.data().size())); if(!request.contentType().empty()) { std::string header = "Content-Type: " + request.contentType(); headers = curl_slist_append(headers, header.c_str()); curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, headers); } } return perform(request); }