51 std::unique_ptr<CurlHolder, std::function<void(CurlHolder*)>>
curl_;
62 curl_ = std::unique_ptr<CurlHolder, std::function<void(CurlHolder*)>>(
newHolder(),
75 #ifdef CPR_CURL_NOSIGNAL 78 #if LIBCURL_VERSION_MAJOR >= 7 79 #if LIBCURL_VERSION_MINOR >= 25 80 #if LIBCURL_VERSION_PATCH >= 0 119 for (
auto item = header.cbegin(); item != header.cend(); ++item) {
121 if (item->second.empty()) {
122 header_string +=
";";
124 header_string +=
": " + item->second;
135 curl_->chunk = chunk;
213 for (
auto& part : multipart.parts) {
214 std::vector<struct curl_forms> formdata;
215 formdata.push_back({CURLFORM_COPYNAME, part.name.data()});
216 if (part.is_buffer) {
217 formdata.push_back({CURLFORM_BUFFER, part.value.data()});
219 {CURLFORM_COPYCONTENTS,
reinterpret_cast<const char*
>(part.data)});
221 {CURLFORM_CONTENTSLENGTH,
reinterpret_cast<const char*
>(part.datalen)});
222 }
else if (part.is_file) {
223 formdata.push_back({CURLFORM_FILE, part.value.data()});
225 formdata.push_back({CURLFORM_COPYCONTENTS, part.value.data()});
227 if (!part.content_type.empty()) {
228 formdata.push_back({CURLFORM_CONTENTTYPE, part.content_type.data()});
230 formdata.push_back({CURLFORM_END,
nullptr});
231 curl_formadd(&formpost, &lastptr, CURLFORM_ARRAY, formdata.data(), CURLFORM_END);
236 curl_->formpost = formpost;
246 for (
auto& part : multipart.
parts) {
247 std::vector<struct curl_forms> formdata;
248 formdata.push_back({CURLFORM_PTRNAME, part.name.data()});
249 if (part.is_buffer) {
250 formdata.push_back({CURLFORM_BUFFER, part.value.data()});
251 formdata.push_back({CURLFORM_BUFFERPTR,
reinterpret_cast<const char*
>(part.data)});
253 {CURLFORM_BUFFERLENGTH,
reinterpret_cast<const char*
>(part.datalen)});
254 }
else if (part.is_file) {
255 formdata.push_back({CURLFORM_FILE, part.value.data()});
257 formdata.push_back({CURLFORM_PTRCONTENTS, part.value.data()});
259 if (!part.content_type.empty()) {
260 formdata.push_back({CURLFORM_CONTENTTYPE, part.content_type.data()});
262 formdata.push_back({CURLFORM_END,
nullptr});
263 curl_formadd(&formpost, &lastptr, CURLFORM_ARRAY, formdata.data(), CURLFORM_END);
268 curl_->formpost = formpost;
405 auto protocol =
url_.substr(0,
url_.find(
':'));
412 curl_->error[0] =
'\0';
434 auto value = tokens.back();
436 cookies[tokens.back()] =
value;
440 return Response{
static_cast<std::int32_t
>(response_code),
void SetCookies(const Cookies &cookies)
std::vector< std::string > split(const std::string &to_split, char delimiter)
CURL_EXTERN curl_version_info_data * curl_version_info(CURLversion)
void SetAuth(const Authentication &auth)
static void freeHolder(CurlHolder *holder)
void SetParameters(const Parameters ¶meters)
void SetVerbose(const Verbose &verbose)
std::string GetEncoded() const
void SetPayload(Payload &&payload)
std::unique_ptr< CurlHolder, std::function< void(CurlHolder *)> > curl_
void SetConnectTimeout(const ConnectTimeout &timeout)
void SetMaxRedirects(const MaxRedirects &max_redirects)
void SetMultipart(Multipart &&multipart)
void SetRedirect(const bool &redirect)
static const void * body(MD5_CTX *ctx, const void *data, unsigned long size)
void SetRedirect(const bool &redirect)
const char * GetAuthString() const noexcept
void SetUrl(const Url &url)
struct curl_slist * chunk
void SetMultipart(Multipart &&multipart)
#define curl_easy_setopt(handle, option, value)
static CurlHolder * newHolder()
void SetConnectTimeout(const ConnectTimeout &timeout)
void SetUserAgent(const UserAgent &ua)
void SetTimeout(const Timeout &timeout)
CURL_EXTERN void curl_formfree(struct curl_httppost *form)
Response makeRequest(CURL *curl)
void SetPayload(Payload &&payload)
static curl_version_info_data version_info
CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post,...)
#define curl_easy_getinfo(handle, info, arg)
CURL_EXTERN struct curl_slist * curl_slist_append(struct curl_slist *, const char *)
void SetUrl(const Url &url)
void SetCookies(const Cookies &cookies)
CURL_EXTERN CURL * curl_easy_init(void)
void SetTimeout(const Timeout &timeout)
UNITTEST_START struct Curl_easy data
void SetLowSpeed(const LowSpeed &low_speed)
void SetProxies(Proxies &&proxies)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
void SetBody(Body &&body)
bool has(const std::string &protocol) const
void SetDigest(const Digest &auth)
std::vector< Part > parts
void SetProxies(Proxies &&proxies)
void SetHeader(const Header &header)
void SetMaxRedirects(const MaxRedirects &max_redirects)
void SetUserAgent(const UserAgent &ua)
struct curl_httppost * formpost
const char * GetAuthString() const noexcept
void SetParameters(const Parameters ¶meters)
UNITTEST_START int * value
void SetVerifySsl(const VerifySsl &verify)
void SetBody(Body &&body)
void SetLowSpeed(const LowSpeed &low_speed)
long Milliseconds() const
size_t writeFunction(void *ptr, size_t size, size_t nmemb, std::string *data)
void SetOption(const Url &url)
std::unique_ptr< Impl > pimpl_
Header parseHeader(const std::string &headers)
CURL_EXTERN void curl_slist_free_all(struct curl_slist *)
void SetDigest(const Digest &auth)
std::int32_t number_of_redirects
const T & move(const T &t)
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl)
void SetHeader(const Header &header)
void SetVerifySsl(const VerifySsl &verify)
void SetAuth(const Authentication &auth)