1#define KURLYK_AUTO_INIT 0
7 <<
"Status Code: " << response->status_code << std::endl
8 <<
"Content: " << response->content << std::endl
9 <<
"----------------------------------------" << std::endl;
12 <<
"Request not ready or cancelled." << std::endl
13 <<
"----------------------------------------" << std::endl;
24 const char* message) {
26 <<
"\n Message: " << message
27 <<
"\n Exception: " << ex.what()
28 <<
"\n Function: " << func
29 <<
"\n File: " << file
30 <<
"\n Line: " << line << std::endl;
35 "https://httpbin.org/delay/5",
39 KURLYK_PRINT <<
"Callback-based GET request response:" << std::endl;
44# if __cplusplus >= 201703L
47 "https://httpbin.org/delay/5",
53 "https://httpbin.org/delay/5",
57 uint64_t request_id2 = func_result.first;
58 auto future_response = std::move(func_result.second);
61 KURLYK_PRINT <<
"Sent two requests. Request IDs: " << request_id1 <<
", " << request_id2 << std::endl;
64 std::this_thread::sleep_for(std::chrono::seconds(1));
65 KURLYK_PRINT <<
"Cancelling the first request (ID: " << request_id1 <<
")..." << std::endl;
67 KURLYK_PRINT <<
"Request 1 cancelled successfully." << std::endl;
71 KURLYK_PRINT <<
"Cancelling the second request (ID: " << request_id2 <<
")..." << std::endl;
76 future_response.get();
77 }
catch (
const std::exception& e) {
78 KURLYK_PRINT <<
"Future-based request exception: " << e.what() << std::endl;
85 auto make_grouped_request = [group_id](uint64_t request_id) {
86# if __cplusplus >= 201402L
87 auto request = std::make_unique<kurlyk::HttpRequest>();
91 request->request_id = request_id;
92 request->group_id = group_id;
93 request->method =
"GET";
94 request->set_url(
"https://httpbin.org",
"/delay/5");
98 auto submit_grouped = [](std::unique_ptr<kurlyk::HttpRequest> request,
const char* label) {
111 submit_grouped(make_grouped_request(grouped_request_id1),
"Grouped request 1");
112 submit_grouped(make_grouped_request(grouped_request_id2),
"Grouped request 2");
115 << grouped_request_id1 <<
", " << grouped_request_id2
116 <<
" | Group ID: " << group_id << std::endl;
117 std::this_thread::sleep_for(std::chrono::seconds(1));
118 KURLYK_PRINT <<
"Cancelling both grouped requests by group_id..." << std::endl;
122 KURLYK_PRINT <<
"Created rate-limit handle ID: " << limit->id() << std::endl;
130 KURLYK_PRINT <<
"Released manager-owned rate-limit handle; pending requests keep copied handles alive." << std::endl;
132 std::this_thread::sleep_for(std::chrono::seconds(1));
133 KURLYK_PRINT <<
"Cancelling the HttpClient request group..." << std::endl;
138 }
catch (
const std::exception& e) {
139 KURLYK_PRINT <<
"Limited request exception: " << e.what() << std::endl;
void print_response(const kurlyk::HttpResponsePtr &response)
Concrete HTTP client for making requests to a specific host.
bool set_rate_limit_handle(const HttpRateLimitHandlePtr &limit, RateLimitType type=RateLimitType::RL_GENERAL)
Sets an existing rate-limit handle for future requests.
void set_timeout(long timeout)
Sets the timeout duration for HTTP requests.
bool get(const std::string &path, const QueryParams &query, const Headers &headers, HttpResponseCallback callback)
Sends a GET request.
void cancel_requests()
Cancels requests associated with this client and waits for cancellation callbacks.
Represents an HTTP request configuration.
Main header file for the Kurlyk library, providing HTTP and WebSocket support.
void init(const bool use_async=true)
Initializes the Kurlyk library, setting up necessary managers and the network worker.
std::unique_ptr< HttpResponse > HttpResponsePtr
Owning pointer to an HTTP response.
void add_error_handler(::kurlyk::core::NetworkWorker::ErrorHandler handler)
Registers a global error handler for the network worker.
void cancel_requests_by_group_id(uint64_t group_id, std::function< void()> callback)
Cancels all requests with the specified group ID.
void deinit()
Deinitializes the Kurlyk library, stopping async processing or cleaning up synchronous state.
utils::CaseInsensitiveMultimap Headers
Alias for HTTP headers, providing a case-insensitive unordered multimap.
uint64_t generate_request_id()
Generates a new unique request ID.
uint64_t generate_group_id()
Generates a new group ID.
uint64_t http_get(const std::string &url, const QueryParams &query, const Headers &headers, HttpResponseCallback callback)
Sends an asynchronous HTTP GET request with a callback.
bool remove_limit(long limit_id)
Releases manager-owned rate-limit handle by ID.
SubmitResult submit_http_request(std::unique_ptr< HttpRequest > request_ptr, HttpResponseCallback callback)
Attempts to submit an HTTP request and reports the admission result.
HttpRateLimitHandlePtr create_rate_limit_rps(long requests_per_second, bool sequential=false)
Creates a RAII rate-limit based on Requests Per Second (RPS).
utils::CaseInsensitiveMultimap QueryParams
Alias for query parameters in HTTP requests, stored case-insensitively.
void cancel_request_by_id(uint64_t request_id, std::function< void()> callback)
Cancels a request by its unique identifier.
Represents the synchronous result of trying to enqueue or submit work.
std::error_code error_code
Describes the rejection reason when accepted is false.