Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
http_client.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
11#include <string>
12#include <map>
13#include <vector>
14#include <memory>
15#include <chrono>
16#include <optional>
17
19{
24 struct http_url
25 {
26 std::string scheme; // http or https
27 std::string host; // hostname or IP
28 unsigned short port = 0; // port number (0 = default)
29 std::string path; // URI path
30 std::map<std::string, std::string> query; // query parameters
31
37 static auto parse(const std::string& url) -> Result<http_url>;
38
43 auto get_default_port() const -> unsigned short;
44 };
45
93 class http_client : public std::enable_shared_from_this<http_client>
94 {
95 public:
100
105 explicit http_client(std::chrono::milliseconds timeout_ms);
106
110 ~http_client() = default;
111
119 auto get(const std::string& url,
120 const std::map<std::string, std::string>& query = {},
121 const std::map<std::string, std::string>& headers = {})
123
131 auto post(const std::string& url,
132 const std::string& body,
133 const std::map<std::string, std::string>& headers = {})
134 -> Result<internal::http_response>;
135
143 auto post(const std::string& url,
144 const std::vector<uint8_t>& body,
145 const std::map<std::string, std::string>& headers = {})
146 -> Result<internal::http_response>;
147
155 auto put(const std::string& url,
156 const std::string& body,
157 const std::map<std::string, std::string>& headers = {})
158 -> Result<internal::http_response>;
159
166 auto del(const std::string& url,
167 const std::map<std::string, std::string>& headers = {})
168 -> Result<internal::http_response>;
169
176 auto head(const std::string& url,
177 const std::map<std::string, std::string>& headers = {})
178 -> Result<internal::http_response>;
179
187 auto patch(const std::string& url,
188 const std::string& body,
189 const std::map<std::string, std::string>& headers = {})
190 -> Result<internal::http_response>;
191
196 auto set_timeout(std::chrono::milliseconds timeout_ms) -> void;
197
202 auto get_timeout() const -> std::chrono::milliseconds;
203
204 private:
214 auto request(internal::http_method method,
215 const std::string& url,
216 const std::vector<uint8_t>& body,
217 const std::map<std::string, std::string>& headers,
218 const std::map<std::string, std::string>& query)
219 -> Result<internal::http_response>;
220
229 auto build_request(internal::http_method method,
230 const http_url& url_info,
231 const std::vector<uint8_t>& body,
232 const std::map<std::string, std::string>& headers)
233 -> internal::http_request;
234
235 std::chrono::milliseconds timeout_;
236 };
237
238} // namespace kcenon::network::core
HTTP/1.1 client built on top of messaging_client.
Definition http_client.h:94
~http_client()=default
Destructor.
TCP client implementation.
Network-specific error and result type definitions.
Parsed URL components.
Definition http_client.h:25
std::map< std::string, std::string > query
Definition http_client.h:30
static auto parse(const std::string &url) -> Result< http_url >
Parse URL string into components.
auto get_default_port() const -> unsigned short
Get default port for scheme.