17 curl_easy_setopt(
_curl, CURLOPT_POSTFIELDS, payload.c_str());
18 curl_easy_setopt(
_curl, CURLOPT_POSTFIELDSIZE_LARGE, payload.size());
19 curl_easy_setopt(
_curl, CURLOPT_URL, fullURL.c_str());
20 curl_easy_setopt(
_curl, CURLOPT_WRITEDATA,
static_cast<void *
>(
_data.get()));
21 curl_easy_setopt(
_curl, method, 1L);
27 auto status =
static_cast<long>(HttpStatus::Code::xxx_max);
28 const CURLcode retval = curl_easy_perform(
_curl);
29 if (retval == CURLE_OK)
31 curl_easy_getinfo(
_curl, CURLINFO_RESPONSE_CODE, &status);
33 statusCode =
static_cast<HttpStatus::Code
>(status);
34 receivedData =
_data->data;
52HTTP::HTTP(std::string addr,
int timeoutInMs) : _hostAddr(std::move(addr))
56 throw std::invalid_argument(
"Can't init curl context");
59 curl_easy_setopt(
_curl, CURLOPT_VERBOSE, 0L);
60 curl_easy_setopt(
_curl, CURLOPT_FOLLOWLOCATION, 1L);
61 curl_easy_setopt(
_curl, CURLOPT_TIMEOUT_MS, timeoutInMs);
62 curl_easy_setopt(
_curl, CURLOPT_CONNECTTIMEOUT_MS, timeoutInMs);
65 curl_easy_setopt(
_curl, CURLOPT_SSLENGINE_DEFAULT, 1L);
66 curl_easy_setopt(
_curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
103 curl_off_t value = 0;
104 curl_easy_getinfo(
_curl, CURLINFO_SIZE_UPLOAD_T, &value);
105 stats.uploadBytes =
static_cast<size_t>(value);
106 curl_easy_getinfo(
_curl, CURLINFO_SIZE_DOWNLOAD_T, &value);
107 stats.downloadBytes =
static_cast<size_t>(value);
108 curl_easy_getinfo(
_curl, CURLINFO_HEADER_SIZE, &value);
109 stats.headerBytes =
static_cast<size_t>(value);
110 curl_easy_getinfo(
_curl, CURLINFO_REQUEST_SIZE, &value);
111 stats.requestBytes =
static_cast<size_t>(value);
112 curl_easy_getinfo(
_curl, CURLINFO_SPEED_UPLOAD_T, &value);
113 stats.uploadSpeed = value;
114 curl_easy_getinfo(
_curl, CURLINFO_SPEED_DOWNLOAD_T, &value);
115 stats.downloadSpeed = value;
116 curl_easy_getinfo(
_curl, CURLINFO_CONNECT_TIME_T, &value);
117 stats.connectionTime = value;
118 curl_easy_getinfo(
_curl, CURLINFO_NAMELOOKUP_TIME_T, &value);
119 stats.nameLookupTime = value;
120 curl_easy_getinfo(
_curl, CURLINFO_PRETRANSFER_TIME_T, &value);
121 stats.preTransferTime = value;
122 curl_easy_getinfo(
_curl, CURLINFO_REDIRECT_TIME_T, &value);
123 stats.redirectTime = value;
124 curl_easy_getinfo(
_curl, CURLINFO_STARTTRANSFER_TIME_T, &value);
125 stats.startTransferTime = value;
126 curl_easy_getinfo(
_curl, CURLINFO_TOTAL_TIME_T, &value);
127 stats.totalTime = value;