NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
http_server_message.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_HTTP_HTTP_SERVER_MESSAGE_HPP__
2#define NEFORCE_NETWORK_HTTP_HTTP_SERVER_MESSAGE_HPP__
3
21
23NEFORCE_BEGIN_NAMESPACE__
24NEFORCE_BEGIN_HTTP__
25
30
71struct NEFORCE_API http_server_request : iobject<http_server_request> {
73 string path{"/"};
74 string version{"HTTP/1.1"};
75 string query;
76 string body;
77
82
83 http_session* session = nullptr;
84
90 NEFORCE_NODISCARD string_view parameter(const string& name) const {
91 const auto it = parameters.find(name);
92 return it != parameters.end() ? it->second.view() : "";
93 }
94
100 void set_parameter(const string& name, string value) { parameters[name] = move(value); }
101
107 NEFORCE_NODISCARD bool has_parameter(const string& name) const { return parameters.find(name) != parameters.end(); }
108
114 NEFORCE_NODISCARD string_view cookie(const string& name) const {
115 const auto it = cookies.find(name);
116 return it != cookies.end() ? it->second.view() : "";
117 }
118
124 void set_cookie(const string& name, string value) { cookies[name] = move(value); }
125
131 NEFORCE_NODISCARD bool has_cookie(const string& name) const { return cookies.find(name) != cookies.end(); }
132
138 NEFORCE_NODISCARD string_view header(const string& name) const {
139 const auto it = headers.find(name);
140 return it != headers.end() ? it->second.view() : "";
141 }
142
148 void set_header(const string& name, string value) { headers[name] = move(value); }
149
155 NEFORCE_NODISCARD bool has_header(const string& name) const { return headers.find(name) != headers.end(); }
156
161 NEFORCE_NODISCARD bool has_session() const noexcept { return session != nullptr && session->is_valid(); }
162
167 NEFORCE_NODISCARD string_view content_type() const { return header(http_key::Content_Type()); }
168
173 NEFORCE_NODISCARD bool is_keep_alive() const {
174 const auto conn = header(http_key::Connection());
175 return conn == "keep-alive" || conn == "Keep-Alive";
176 }
177
185 NEFORCE_NODISCARD string_view client_ip() const;
186
191 NEFORCE_NODISCARD string_view user_agent() const { return header("User-Agent"); }
192
197 NEFORCE_NODISCARD string_view referer() const { return header("Referer"); }
198
205 NEFORCE_NODISCARD bool is_ajax() const { return header("X-Requested-With") == "XMLHttpRequest"; }
206
210 void clear();
211
221 NEFORCE_NODISCARD static http_server_request parse(string_view str);
222
227 NEFORCE_NODISCARD string to_string() const;
228};
229
230
265struct NEFORCE_API http_server_response : istringify<http_server_response> {
266 string version{"HTTP/1.1"};
271 string body;
274
281 headers[http_key::Content_Type()] = http_content::PLAIN_TEXT().to_string() + "; charset=utf-8";
282 headers[http_key::Connection()] = "close";
283 }
284
290 NEFORCE_NODISCARD string_view header(const string& name) const {
291 const auto it = headers.find(name);
292 return it != headers.end() ? it->second.view() : "";
293 }
294
300 void set_header(const string& name, string value) { headers[name] = move(value); }
301
307 NEFORCE_NODISCARD bool has_header(const string& name) const { return headers.find(name) != headers.end(); }
308
313 void set_content_type(http_content value) { headers[http_key::Content_Type()] = move(value).content(); }
314
319 void set_content_type(string value) { headers[http_key::Content_Type()] = move(value); }
320
328 NEFORCE_NODISCARD string to_string() const;
329};
330
336
342 // HTTP
344
345NEFORCE_END_HTTP__
346NEFORCE_END_NAMESPACE__
347#endif // NEFORCE_NETWORK_HTTP_HTTP_SERVER_MESSAGE_HPP__
无序映射容器
动态大小数组容器
http_server_response http_response
HTTP响应类型别名
http_server_request http_request
HTTP请求类型别名
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
bool name(char *buffer, size_t size)
获取当前线程名称
http_status
HTTP状态码枚举
@ S4_NOT_FOUND
404 Not Found 请求的资源不存在
HTTP Cookie和会话管理
HTTP内容类型定义
static const http_content & PLAIN_TEXT()
text/plain
string to_string() const
转换为字符串
HTTP方法定义
static const http_method & GET()
GET方法
HTTP服务器请求结构
string_view referer() const
获取Referer
void clear()
清空请求所有数据
void set_parameter(const string &name, string value)
设置参数
string_view parameter(const string &name) const
获取参数值
string_view user_agent() const
获取User-Agent
bool has_parameter(const string &name) const
检查参数是否存在
string_view content_type() const
获取Content-Type
unordered_map< string, string > headers
请求头
string to_string() const
序列化为HTTP请求字符串
string_view cookie(const string &name) const
获取Cookie值
bool is_keep_alive() const
检查是否为Keep-Alive连接
http_session * session
会话对象
void set_cookie(const string &name, string value)
设置Cookie值
bool is_ajax() const
检查是否为AJAX请求
bool has_header(const string &name) const
检查请求头是否存在
string_view header(const string &name) const
获取请求头值
unordered_map< string, string > form_data
表单数据
string_view client_ip() const
获取客户端真实IP
bool has_cookie(const string &name) const
检查Cookie是否存在
static http_server_request parse(string_view str)
从字符串解析HTTP请求
unordered_map< string, string > cookies
Cookie
void set_header(const string &name, string value)
设置请求头
unordered_map< string, string > parameters
请求参数
bool has_session() const noexcept
检查是否有关联的有效会话
HTTP服务器响应结构
http_status status
HTTP状态码
void set_content_type(http_content value)
设置Content-Type
string_view header(const string &name) const
获取响应头值
unordered_map< string, string > headers
响应头
string to_string() const
序列化为HTTP响应字符串
void set_header(const string &name, string value)
设置响应头
vector< http_cookie > cookies
设置的Cookie
void set_content_type(string value)
设置Content-Type
http_server_response()
默认构造函数
bool has_header(const string &name) const
检查响应头是否存在
HTTP会话结构
可解析对象接口
可字符串化接口