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
17NEFORCE_BEGIN_NAMESPACE__
18NEFORCE_BEGIN_HTTP__
19
24
80class NEFORCE_API http_client {
81public:
101
102 using progress_callback_t = function<void(size_t, size_t)>;
103 using error_callback_t = function<void(const exception&)>;
105
107
108private:
109 client_type client_;
110 config config_;
112 unordered_map<string, string> persistent_headers_;
113 mutable mutex mutex_;
114
115 progress_callback_t progress_callback_;
116 error_callback_t error_callback_;
117
118private:
119 string build_request_str(const http_client_request& req, const url& req_url) const;
120 bool send_request(string_view request_str, time_point& send_start);
121
122 optional<http_client_response> read_response(time_point& receive_start, const string& request_host,
123 const string& request_path);
124
125 void update_cookies(const vector<http_cookie>& resp_cookies, const url& request_url);
126 string build_cookie_header(const url& request_url) const;
127
128 http_client_response do_request(http_client_request request, int redirect_count = 0);
129 bool ensure_connected(const string& host, ports port);
130
131public:
137
143
150
151 ~http_client() = default;
152
153 http_client(const http_client&) = delete;
154 http_client& operator=(const http_client&) = delete;
155
156 http_client(http_client&&) noexcept = default;
157 http_client& operator=(http_client&&) noexcept = default;
158
163 void set_config(config cfg) {
164 lock<mutex> lk(mutex_);
165 config_ = move(cfg);
166 }
167
172 const config& get_config() const noexcept { return config_; }
173
178 const client_type& get_client() const noexcept { return client_; }
179 client_type& get_client() noexcept { return client_; }
180
186 void set_default_header(const string& key, string value) {
187 lock<mutex> lk(mutex_);
188 persistent_headers_[key] = move(value);
189 }
190
195 void remove_default_header(const string& key) {
196 lock<mutex> lk(mutex_);
197 persistent_headers_.erase(key);
198 }
199
204 void set_max_redirects(uint16_t max) { config_.max_redirects = max; }
205
210 void set_follow_redirects(bool follow) { config_.follow_redirects = follow; }
211
217 config_.connect_timeout = timeout;
218 config_.send_timeout = timeout;
219 config_.receive_timeout = timeout;
220 }
221
227 void set_proxy(string host, const ports port) {
228 config_.proxy_host = move(host);
229 config_.proxy_port = port;
230 }
231
235 void clear_proxy() {
236 config_.proxy_host.clear();
237 config_.proxy_port = ports::UNDEF;
238 }
239
244 void set_progress_callback(progress_callback_t callback) { progress_callback_ = move(callback); }
245
250 void set_error_callback(error_callback_t callback) { error_callback_ = move(callback); }
251
257
262 void set_verify_ssl(bool verify);
263
268 lock<mutex> lk(mutex_);
269 cookie_jar_.clear();
270 }
271
278 void set_cookie(const http_cookie& c, const string& domain, const string& path = "/");
279
285 lock<mutex> lk(mutex_);
286 return cookie_jar_;
287 }
288
299 http_client_response get(const string& url, const unordered_map<string, string>& headers = {});
300
314 http_client_response post(const string& url, const string& body = "",
315 const string& content_type = "application/x-www-form-urlencoded",
316 const unordered_map<string, string>& headers = {});
317
329 http_client_response post_json(const string& url_str, const string& json_body,
330 const unordered_map<string, string>& headers);
331
343 http_client_response post_form(const string& url_str, const unordered_map<string, string>& form_data,
344 const unordered_map<string, string>& headers);
345
358 http_client_response put(const string& url, const string& body = "",
359 const string& content_type = "application/x-www-form-urlencoded",
360 const unordered_map<string, string>& headers = {});
361
371 http_client_response del(const string& url, const unordered_map<string, string>& headers = {});
372
383 http_client_response head(const string& url, const unordered_map<string, string>& headers = {});
384
396
409 http_client_response patch(const string& url, const string& body = "",
410 const string& content_type = "application/x-www-form-urlencoded",
411 const unordered_map<string, string>& headers = {});
412
419
427 bool download_file(const string& url, path output, bool is_binary = true);
428
435
439 void close();
440
445 NEFORCE_NODISCARD bool is_connected() const noexcept { return client_.is_connected(); }
446};
447 // HTTP
449
450NEFORCE_END_HTTP__
451NEFORCE_END_NAMESPACE__
452#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)
设置默认请求头
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
错误回调类型
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请求
NEFORCE_NODISCARD unordered_map< string, http_cookie > get_cookies() const
获取所有Cookie
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
获取底层客户端
NEFORCE_NODISCARD bool is_connected() 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统一资源定位符解析与构建