19 std::string _parameters;
20 std::string _responseCode;
22 std::string _HTTPVersion;
23 std::vector<std::string> _chunks;
32 static std::string getChunks(
const std::vector<std::string>& chunks,
bool partialChunks,
bool preCalculateSize =
false);
37 static std::string getChunk(std::string_view chunk);
94 template<
typename StringT,
typename T,
typename... Args>
95 HTTPBuilder& queryParameters(StringT&& name, T&& value, Args&&... args);
97 template<
typename... Args>
98 HTTPBuilder& parametersWithRoute(std::string_view route, Args&&... args);
103 HTTPBuilder& parameters(std::string_view parameters);
109 HTTPBuilder& HTTPVersion(std::string_view httpVersion);
119 template<
typename StringT,
typename T,
typename... Args>
120 HTTPBuilder& headers(StringT&& name, T&& value, Args&&... args);
128 std::string
build(std::string_view data =
"",
const std::unordered_map<std::string, std::string>& additionalHeaders = {})
const;
130 std::string
build(
const json::JSONBuilder& builder, std::unordered_map<std::string, std::string> additionalHeaders = {})
const;
132 std::string
build(
const std::unordered_map<std::string, std::string>& urlEncoded, std::unordered_map<std::string, std::string> additionalHeaders = {})
const;
150 static_assert(std::is_convertible_v<
decltype(name), std::string_view>,
"Wrong StringT type");
152 if (_parameters.empty())
157 if constexpr (std::is_arithmetic_v<T>)
159 _parameters += std::format(
"{}={}&",
web::encodeUrl(
static_cast<std::string_view
>(name)), std::to_string(value));
161 else if constexpr (std::is_convertible_v<
decltype(value), std::string_view>)
163 _parameters += std::format(
"{}={}&",
web::encodeUrl(
static_cast<std::string_view
>(name)),
web::encodeUrl(
static_cast<std::string_view
>(value)));
165 else if constexpr (std::is_convertible_v<
decltype(value), std::string>)
167 _parameters += std::format(
"{}={}&",
web::encodeUrl(
static_cast<std::string_view
>(name)),
web::encodeUrl(
static_cast<std::string
>(value)));
171 throw std::logic_error(
"Bad type of T, it must be converted to string or arithmetic type");
179 _parameters.pop_back();
211 if constexpr (
sizeof...(args))
213 if (
static_cast<std::string
>(name) ==
"Content-Length" ||
static_cast<std::string
>(name) ==
"content-length")
215 return headers(std::forward<Args>(args)...);
219 if constexpr (std::is_arithmetic_v<std::remove_reference_t<T>>)
221 _headers +=
static_cast<std::string
>(name) + std::string(
": ") + std::to_string(value) + std::string(
"\r\n");
225 _headers +=
static_cast<std::string
>(name) + std::string(
": ") +
static_cast<std::string
>(value) + std::string(
"\r\n");
229 _headers +=
static_cast<std::string
>(name) + std::string(
": ");
231 auto checkValueType = *std::begin(value);
233 if constexpr (std::is_arithmetic_v<
decltype(checkValueType)>)
235 for (
auto&& i : value)
237 _headers += std::to_string(i) + std::string(
", ");
243 _headers.insert(_headers.size(),
"\r\n");
247 for (
auto&& i : value)
249 _headers +=
static_cast<std::string
>(i) + std::string(
", ");
255 _headers.insert(_headers.size(),
"\r\n");
259 throw std::logic_error(
"Bad type of values in class T, it must be converted to string or arithmetic type");
264 throw std::logic_error(
"Bad type of T, it must be converted to string or arithmetic type");
269 throw std::logic_error(
"Bad type of StringT, it must be converted to string");
272 if constexpr (
sizeof...(args))
274 return headers(std::forward<Args>(args)...);
std::string build(const std::unordered_map< std::string, std::string > &urlEncoded, std::unordered_map< std::string, std::string > additionalHeaders={}) const