acl  3.5.3.0
http_utils.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/string.hpp"
4 
5 namespace acl {
6 
8 {
9 public:
12 
13  /**
14  * 从完整的 url 中获得 WEB 服务器地址,格式:domain:port
15  * @param url {const char*} HTTP url,非空
16  * @param addr {char*} 存储结果,存储格式:domain:port
17  * @param size {size_t} out 缓冲区大小
18  * @return {bool} 是否成功获得
19  */
20  static bool get_addr(const char* url, char* addr, size_t size);
21 
22  /**
23  * 从完整的 url 中获得 WEB 服务器 IP 地址及端口号
24  * @param url {const char*} HTTP url,非空
25  * @param domain {char*} 存储域名
26  * @param size {size_t} domain 内存大小
27  * @param port {unsigned short*} 存储端口号大小
28  * @return {bool} 是否成功获得
29  */
30  static bool get_addr(const char* url, char* domain, size_t size,
31  unsigned short* port);
32 
33  /**
34  * 解析输入的完整或部分 URL
35  * @param url {const char*} 非空完整或部分 URL 字符串
36  * @param domain {string&} 用来存放域名地址信息
37  * @param port {unsigned short*} 用来存放 url 中的端口号
38  * @param url_path {string&} 用来存放 url 中不含域名和参数的部分,即针对类似
39  * 于 URL:http://test.com.cn/cgi-bin/test?name=value 则只提取其中的字
40  * 符串:/cgi-bin/test
41  * @param url_params {string&} 用来存放 url 中的参数部分字符串
42  * @return {bool} 解析 url 是否成功
43  */
44  static bool parse_url(const char* url, string& domain,
45  unsigned short* port, string& url_path, string& url_params);
46 };
47 
49 public:
50  http_url(void);
51  ~http_url(void) {}
52 
53  bool parse(const char* url);
54 
55 public:
56  /**
57  * 返回 URL 中的协议类型:http 或 https
58  * @return {const char*}
59  */
60  const char* get_proto(void) const {
61  return proto_;
62  }
63 
64  /**
65  * 返回 URL 中的域名字段
66  * @return {const char*} 返回空串则表示没有该字段
67  */
68  const char* get_domain(void) const {
69  return domain_.c_str();
70  }
71 
72  /**
73  * 返回根据 URL 提取的 HTTP 协议服务端端口号,内部缺省值为 80
74  * @return {unsigned short}
75  */
76  unsigned short get_port(void) const {
77  return port_;
78  }
79 
80  /**
81  * 返回根据 URL 提取的相对路径部分(不含 ? 后面的参数)
82  * @return {const char*}
83  */
84  const char* get_url_path(void) const {
85  return url_path_.c_str();
86  }
87 
88  /**
89  * 返回从 URL 中提取的参数字段
90  * @return {const char*}
91  */
92  const char* get_url_params(void) const {
93  return url_params_.c_str();
94  }
95 
96  /**
97  * 清理解析过程中的中间状态,以便重复使用该类对象解析下一个 URL
98  */
99  void reset(void);
100 
101 private:
102  char proto_[16];
103  string domain_;
104  unsigned short port_;
105  string url_path_;
106  string url_params_;
107 
108  bool parse_url_part(const char* url);
109  const char* parse_domain(const char* url);
110 };
111 
112 } // namespace acl
const char * get_url_params(void) const
Definition: http_utils.hpp:92
const char * get_proto(void) const
Definition: http_utils.hpp:60
#define ACL_CPP_API
unsigned short get_port(void) const
Definition: http_utils.hpp:76
const char * get_url_path(void) const
Definition: http_utils.hpp:84
const char * get_domain(void) const
Definition: http_utils.hpp:68