NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
http_client.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_HTTP_HTTP_CLIENT_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_CLIENT_HPP__
3
11
18NEFORCE_BEGIN_NAMESPACE__
19NEFORCE_BEGIN_HTTP__
20
25
81class NEFORCE_API http_client {
82public:
102
103 using progress_callback_t = function<void(size_t, size_t)>;
104 using error_callback_t = function<void(const exception&)>;
106
108
109private:
110 client_type client_;
111 config config_;
113 unordered_map<string, string> persistent_headers_;
114 mutable mutex mutex_;
115
116 progress_callback_t progress_callback_;
117 error_callback_t error_callback_;
118
119private:
120 string build_request_str(const http_client_request& req, const url& req_url) const;
121 bool send_request(string_view request_str, time_point& send_start);
122
123 optional<http_client_response> read_response(time_point& receive_start, const string& request_host,
124 const string& request_path);
125
126 void update_cookies(const vector<http_cookie>& resp_cookies, const url& request_url);
127 string build_cookie_header(const url& request_url) const;
128
129 http_client_response do_request(http_client_request request, int redirect_count = 0);
130 bool ensure_connected(const string& host, ports port);
131
132public:
138
144
151
152 ~http_client() = default;
153
154 http_client(const http_client&) = delete;
155 http_client& operator=(const http_client&) = delete;
156
157 http_client(http_client&&) noexcept = delete;
158 http_client& operator=(http_client&&) noexcept = delete;
159
164 void set_config(config cfg) {
165 lock<mutex> lk(mutex_);
166 config_ = move(cfg);
167 }
168
173 const config& get_config() const noexcept { return config_; }
174
179 const client_type& get_client() const noexcept { return client_; }
180 client_type& get_client() noexcept { return client_; }
181
187 void set_default_header(const string& key, string value) {
188 lock<mutex> lk(mutex_);
189 persistent_headers_[key] = move(value);
190 }
191
196 void remove_default_header(const string& key) {
197 lock<mutex> lk(mutex_);
198 persistent_headers_.erase(key);
199 }
200
205 void set_max_redirects(uint16_t max) { config_.max_redirects = max; }
206
211 void set_follow_redirects(bool follow) { config_.follow_redirects = follow; }
212
218 config_.connect_timeout = timeout;
219 config_.send_timeout = timeout;
220 config_.receive_timeout = timeout;
221 }
222
228 void set_proxy(string host, const ports port) {
229 config_.proxy_host = move(host);
230 config_.proxy_port = port;
231 }
232
236 void clear_proxy() {
237 config_.proxy_host.clear();
238 config_.proxy_port = ports::UNDEF;
239 }
240
245 void set_progress_callback(progress_callback_t callback) { progress_callback_ = move(callback); }
246
251 void set_error_callback(error_callback_t callback) { error_callback_ = move(callback); }
252
258
263 void set_verify_ssl(bool verify);
264
269 lock<mutex> lk(mutex_);
270 cookie_jar_.clear();
271 }
272
279 void set_cookie(const http_cookie& c, const string& domain, const string& path = "/");
280
286 lock<mutex> lk(mutex_);
287 return cookie_jar_;
288 }
289
300 http_client_response get(const string& url, const unordered_map<string, string>& headers = {});
301
315 http_client_response post(const string& url, const string& body = "",
316 const string& content_type = "application/x-www-form-urlencoded",
317 const unordered_map<string, string>& headers = {});
318
330 http_client_response post_json(const string& url_str, const string& json_body,
331 const unordered_map<string, string>& headers);
332
344 http_client_response post_form(const string& url_str, const unordered_map<string, string>& form_data,
345 const unordered_map<string, string>& headers);
346
359 http_client_response put(const string& url, const string& body = "",
360 const string& content_type = "application/x-www-form-urlencoded",
361 const unordered_map<string, string>& headers = {});
362
372 http_client_response del(const string& url, const unordered_map<string, string>& headers = {});
373
384 http_client_response head(const string& url, const unordered_map<string, string>& headers = {});
385
397
410 http_client_response patch(const string& url, const string& body = "",
411 const string& content_type = "application/x-www-form-urlencoded",
412 const unordered_map<string, string>& headers = {});
413
420
428 bool download_file(const string& url, path output, bool is_binary = true);
429
436
440 void close();
441
446 NEFORCE_NODISCARD bool is_connected() const noexcept { return client_.is_connected(); }
447};
448 // HTTP
450
451NEFORCE_END_HTTP__
452NEFORCE_END_NAMESPACE__
453#endif // NEFORCE_NETWORK_HTTP_HTTP_CLIENT_HPP__
字节大小表示和转换工具
字节大小类
函数包装器主模板声明
独占future类模板
void set_max_redirects(uint16_t max)
设置最大重定向次数
bool download_file(const string &url, path output, bool is_binary=true)
下载文件
void set_cookie(const http_cookie &c, const string &domain, const string &path="/")
设置Cookie
void set_error_callback(error_callback_t callback)
设置错误回调
void set_default_header(const string &key, string value)
设置默认请求头
bool is_connected() const noexcept
检查是否已连接
const config & get_config() const noexcept
获取客户端配置
void clear_proxy()
清除代理设置
http_client_response del(const string &url, const unordered_map< string, string > &headers={})
发送DELETE请求
void set_verify_ssl(bool verify)
设置是否验证SSL证书
http_client_response patch(const string &url, const string &body="", const string &content_type="application/x-www-form-urlencoded", const unordered_map< string, string > &headers={})
发送PATCH请求
void set_ssl_context(ssl_context ctx)
设置SSL上下文
future< http_client_response > request_async(http_client_request req)
异步HTTP请求
http_client_response post_form(const string &url_str, const unordered_map< string, string > &form_data, const unordered_map< string, string > &headers)
发送POST表单请求
http_client_response get(const string &url, const unordered_map< string, string > &headers={})
发送GET请求
void set_proxy(string host, const ports port)
设置代理
function< void(const exception &)> error_callback_t
错误回调类型
unordered_map< string, http_cookie > get_cookies() const
获取所有Cookie
http_client_response request(http_client_request req)
发送自定义HTTP请求
http_client_response options(const string &url, const unordered_map< string, string > &headers={})
发送OPTIONS请求
http_client_response post_json(const string &url_str, const string &json_body, const unordered_map< string, string > &headers)
发送POST JSON请求
void set_config(config cfg)
设置客户端配置
http_client(ssl_context ctx, config config)
构造函数(带SSL上下文)
http_client_response put(const string &url, const string &body="", const string &content_type="application/x-www-form-urlencoded", const unordered_map< string, string > &headers={})
发送PUT请求
void set_progress_callback(progress_callback_t callback)
设置进度回调
void set_follow_redirects(bool follow)
设置是否跟随重定向
void clear_cookies()
清空Cookie存储
http_client()
默认构造函数
http_client(config config)
构造函数
steady_clock::time_point time_point
时间点类型
http_client_response post(const string &url, const string &body="", const string &content_type="application/x-www-form-urlencoded", const unordered_map< string, string > &headers={})
发送POST请求
ssl_client client_type
底层客户端类型
const client_type & get_client() const noexcept
获取底层客户端
http_client_response head(const string &url, const unordered_map< string, string > &headers={})
发送HEAD请求
function< void(size_t, size_t)> progress_callback_t
进度回调类型
void remove_default_header(const string &key)
移除默认请求头
void close()
关闭连接
void set_timeout(milliseconds timeout)
设置统一超时时间
锁管理器模板
非递归互斥锁
可选值类
文件路径类
SSL/TLS客户端类
SSL/TLS上下文管理类
无序映射容器
动态大小数组容器
constexpr const T & max(const T &a, const T &b, Compare comp) noexcept(noexcept(comp(a, b)))
返回两个值中的较大者
unsigned short uint16_t
16位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
HTTP客户端消息结构
互斥锁
文件路径类
异常基类
HTTP客户端配置
bool follow_redirects
是否跟随重定向
uint16_t max_redirects
最大重定向次数
string proxy_host
代理主机
milliseconds connect_timeout
连接超时
bool verify_ssl
是否验证SSL证书
string user_agent
User-Agent
byte_size buffer_size
缓冲区大小
byte_size max_response_size
最大响应大小
milliseconds send_timeout
发送超时
unordered_map< string, string > default_headers
默认请求头
ports proxy_port
代理端口
milliseconds receive_timeout
接收超时
bool keep_alive
是否保持连接
HTTP客户端请求结构
HTTP客户端响应结构
网络端口封装类
@ UNDEF
未定义/无效端口
_NEFORCE time_point< steady_clock > time_point
时间点类型
URL统一资源定位符
TCP客户端实现
URL统一资源定位符解析与构建