1 #ifndef _CscHttpClient_H
2 #define _CscHttpClient_H
10 using std::stringstream, std::exception, std::move;
16 namespace fs = std::filesystem;
21 static optional<unsigned> &defaultTimeoutSecondsGet();
22 static optional<unsigned> &defaultTimeoutSecondsPost();
23 static optional<unsigned> &defaultTimeoutSecondsDownload();
33 optional<unsigned> getHttpCode()
const;
35 const optional<unsigned> httpCode;
47 const string &content,
48 const map<string, string> &headers);
50 const string &getContent()
const;
58 return getContentAsJson()->asArrayValue<T>();
61 const long &getCode()
const;
62 const map<string, string> &getHeaders();
72 const map<string, string> headers;
84 map<string, string> queryStringParameters = {};
85 optional<int> port = {};
86 map<string, string> headers = {};
87 optional<unsigned> timeoutSeconds = CscHttpClientConfiguration::defaultTimeoutSecondsGet();
90 return port.value_or(protocol ==
"https" ? 443 : 80);
106 map<string, string> queryStringParameters = {};
107 map<string, string> headers = {};
108 optional<int> port = {};
109 optional<unsigned> timeoutSeconds = CscHttpClientConfiguration::defaultTimeoutSecondsPost();
113 return port.value_or(protocol ==
"https" ? 443 : 80);
121 std::map<std::string, std::string>
fields;
128 int timeoutSeconds = 30;
146 const HttpGet ¶meters,
const fs::path &outFilePath, optional<
function<
void(
float progressRatio)>>
onProgress = {}, optional<unsigned> timeoutSeconds = CscHttpClientConfiguration::defaultTimeoutSecondsDownload())
const noexcept(
false);
149 const string &protocol,
const string &host,
const string &path,
int port,
const fs::path &filePath)
const noexcept(
false);
152 const string &protocol,
156 const std::vector<unsigned char> &dataBuffer,
157 const std::string &contentType =
"application/octet-stream")
const;
162 std::string generateBoundary()
const;
163 struct InternalRequestOptions {
166 optional<fs::path> uploadedFilePath = {};
167 map<string, string> headers;
168 map<string, string> queryStringParameters;
169 optional<PostParameters> postParameters = {};
170 optional<fs::path> downloadedFilePath = {};
171 optional<unsigned> timeoutSeconds = {};
173 std::optional<std::string> rawBody;
177 InternalRequestOptions &setPost(
bool post);
178 InternalRequestOptions &setUploadedFilePath(
const fs::path &uploadedFilePath);
179 InternalRequestOptions &setDownloadedFilePath(
const fs::path &downloadedFilePath);
180 InternalRequestOptions &setHeaders(
const map<string, string> &headers);
181 InternalRequestOptions &setQueryStringParameters(
const map<string, string> ¶meters);
182 InternalRequestOptions &setRawBody(
const std::string &body);
187 InternalRequestOptions &setPostParameters(
PostParameters parameters);
188 InternalRequestOptions &setTimeoutSeconds(
const optional<unsigned> &timeoutSeconds);
190 InternalRequestOptions &setProgressCallback(
const optional<
function<
void(
float progressRatio)>> &
onProgress);
193 InternalRequestOptions options()
const;
195 inline static std::mutex singletonMutex;
198 std::unique_ptr<CscLogger>
logger;
205 const string &protocol,
const string &host,
const string &path,
int port,
const InternalRequestOptions &options)
const;
207 void logRequest(
string summary,
const string &protocol,
const string &host,
const string &path,
int port)
const;