|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
URL统一资源定位符 更多...
#include <url.hpp>
Public 成员函数 | |
| url ()=default | |
| 默认构造函数 | |
| NEFORCE_NODISCARD bool | is_valid () const noexcept |
| 验证URL是否有效 | |
| NEFORCE_NODISCARD string | to_string () const |
| 转换为字符串 | |
| Public 成员函数 继承自 iobject< url > | |
| NEFORCE_CONSTEXPR20 bool | try_parse (const string_view str) noexcept |
| 尝试从字符串解析对象 | |
| Public 成员函数 继承自 istringify< url > | |
| NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 string | to_string () const |
| 转换为字符串 | |
静态 Public 成员函数 | |
| static NEFORCE_NODISCARD url | parse (string_view str) |
| 解析URL字符串 | |
| static NEFORCE_NODISCARD string | encode (string_view str, bool encode_slash=true) |
| URL编码字符串 | |
| static NEFORCE_NODISCARD optional< string > | decode (string_view str) |
| URL解码字符串 | |
| static NEFORCE_NODISCARD string | encode_form (string_view str) |
| 表单编码(application/x-www-form-urlencoded) | |
| static NEFORCE_NODISCARD string | decode_tolerant (string_view str) |
| 宽容解码 | |
| static void | parse_query (string_view query, unordered_map< string, string > ¶ms) |
| 解析查询字符串 | |
| static NEFORCE_NODISCARD string | build_query (const unordered_map< string, string > ¶ms) |
| 构建查询字符串 | |
| 静态 Public 成员函数 继承自 iobject< url > | |
| static NEFORCE_NODISCARD constexpr url | parse (const string_view str) |
| 从字符串解析对象 | |
Public 属性 | |
| string | scheme |
| 协议类型 | |
| string | host |
| 主机名或IP地址 | |
| ports | port |
| 端口号 | |
| string | path |
| 资源路径 | |
| string | query |
| 查询字符串 | |
| string | fragment |
| 片段标识符 | |
URL统一资源定位符
表示一个标准的URL,包含以下组成部分:
提供了URL的解析和构建功能。
URL是互联网上标识和定位资源的标准方式,由多个组成部分构成。
本实现严格遵循以下URL规范与编码标准:
URL语法标准:
WHATWG URL标准:
URL编码标准:
HTML表单编码标准:
URI与URL区分:
相关安全标准:
根据RFC 3986 §3,URL(URI的定位子集)的通用语法为:
其中hier-part对于基于权限的URL为:
authority部分为:
本实现解析和存储以下URL组成部分:
| 组成部分 | RFC 3986引用 | 类型 | 示例 | 说明 |
|---|---|---|---|---|
| scheme | §3.1 | string | "https" | 协议类型(不区分大小写) |
| host | §3.2.2 | string | "example.com" | 主机名或IP地址 |
| port | §3.2.3 | ports | 443 | 端口号 |
| path | §3.3 | string | "/path/to/resource" | 资源路径 |
| query | §3.4 | string | "key=value&foo=bar" | 查询字符串 |
| fragment | §3.5 | string | "section1" | 片段标识符 |
根据RFC 3986 §2.1,百分号编码规则:
**保留字符**(在特定上下文中具有特殊含义):
**非保留字符**(可直接使用无需编码):
**编码格式**:% + 两个十六进制数字(大写),如空格编码为 %20。
根据WHATWG HTML标准§4.10.21,application/x-www-form-urlencoded编码规则:
| 规则 | 说明 |
|---|---|
| 空格编码 | 空格替换为 +(而非 %20) |
| 保留字符 | * - . _ 不编码,其他保留字符进行百分号编码 |
| 键值对分隔 | & 分隔多个参数 |
| 键值赋值 | = 连接键和值 |
| 特性 | 规范参数 |
|---|---|
| Scheme解析 | 大小写不敏感,存储为小写 |
| 端口推断 | 省略时根据scheme自动推断默认端口 |
| 默认路径 | 空路径自动设为"/" |
| IPv6支持 | 主机部分支持[::]格式 |
| 编码字符集 | UTF-8(RFC 3986推荐) |
| 无效URL处理 | 抛出network_exception异常 |
|
static |
构建查询字符串
| params | 参数映射 |
将键值对转换为"key1=value1&key2=value2"格式的查询字符串。 键和值会自动进行表单编码。
引用了 build_query().
被这些函数引用 build_query().
|
static |
|
static |
宽容解码
| str | 待解码的字符串 |
尝试解码,如果遇到无效的XX格式,保留原字符。 适用于处理不规范的URL编码。
引用了 decode_tolerant().
被这些函数引用 decode_tolerant().
|
static |
|
static |
表单编码(application/x-www-form-urlencoded)
| str | 待编码的字符串 |
符合WHATWG HTML标准的表单编码规则:
引用了 encode_form().
被这些函数引用 encode_form().
|
noexcept |
验证URL是否有效
|
static |
解析URL字符串
| str | URL字符串视图 |
| network_exception | 当URL格式无效时抛出 |
解析标准格式的URL:scheme://host[:port][/path][?query]
被这些函数引用 parse().
|
static |
解析查询字符串
| query | 查询字符串 |
| params | 输出参数映射 |
将"key1=value1&key2=value2"格式的查询字符串解析为键值对。 键和值会自动进行URL解码。
引用了 parse_query() , 以及 query.
被这些函数引用 parse_query().
| NEFORCE_NODISCARD string url::to_string | ( | ) | const |
转换为字符串
根据各个部分重新构建URL字符串:
引用了 to_string().
被这些函数引用 to_string().