mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-14 00:40:55 +08:00
90 lines
2.2 KiB
C++
90 lines
2.2 KiB
C++
#pragma once
|
||
#include "../acl_cpp_define.hpp"
|
||
#include "../stdlib/string.hpp"
|
||
|
||
namespace acl {
|
||
|
||
class ACL_CPP_API http_utils
|
||
{
|
||
public:
|
||
http_utils() {}
|
||
~http_utils() {}
|
||
|
||
/**
|
||
* 从完整的 url 中获得 WEB 服务器地址,格式:domain:port
|
||
* @param url {const char*} HTTP url,非空
|
||
* @param addr {char*} 存储结果,存储格式:domain:port
|
||
* @param size {size_t} out 缓冲区大小
|
||
* @return {bool} 是否成功获得
|
||
*/
|
||
static bool get_addr(const char* url, char* addr, size_t size);
|
||
|
||
/**
|
||
* 从完整的 url 中获得 WEB 服务器 IP 地址及端口号
|
||
* @param url {const char*} HTTP url,非空
|
||
* @param domain {char*} 存储域名
|
||
* @param size {size_t} domain 内存大小
|
||
* @param port {unsigned short*} 存储端口号大小
|
||
* @return {bool} 是否成功获得
|
||
*/
|
||
static bool get_addr(const char* url, char* domain, size_t size,
|
||
unsigned short* port);
|
||
|
||
/**
|
||
* 解析输入的完整或部分 URL
|
||
* @param url {const char*} 非空完整或部分 URL 字符串
|
||
* @param domain {string&} 用来存放域名地址信息
|
||
* @param port {unsigned short*} 用来存放 url 中的端口号
|
||
* @param url_path {string&} 用来存放 url 中不含域名和参数的部分,即针对类似
|
||
* 于 URL:http://test.com.cn/cgi-bin/test?name=value 则只提取其中的字
|
||
* 符串:/cgi-bin/test
|
||
* @param url_params {string&} 用来存放 url 中的参数部分字符串
|
||
* @return {bool} 解析 url 是否成功
|
||
*/
|
||
static bool parse_url(const char* url, string& domain,
|
||
unsigned short* port, string& url_path, string& url_params);
|
||
};
|
||
|
||
class ACL_CPP_API http_url {
|
||
public:
|
||
http_url(void);
|
||
~http_url(void) {}
|
||
|
||
bool parse(const char* url);
|
||
|
||
public:
|
||
const char* get_proto(void) const {
|
||
return proto_;
|
||
}
|
||
|
||
const char* get_domain(void) const {
|
||
return domain_.c_str();
|
||
}
|
||
|
||
unsigned short get_port(void) const {
|
||
return port_;
|
||
}
|
||
|
||
const char* get_url_path(void) const {
|
||
return url_path_.c_str();
|
||
}
|
||
|
||
const char* get_url_params(void) const {
|
||
return url_params_.c_str();
|
||
}
|
||
|
||
void reset(void);
|
||
|
||
private:
|
||
char proto_[16];
|
||
string domain_;
|
||
unsigned short port_;
|
||
string url_path_;
|
||
string url_params_;
|
||
|
||
bool parse_url_part(const char* url);
|
||
const char* parse_domain(const char* url);
|
||
};
|
||
|
||
} // namespace acl
|