本次发布
依赖项
分支 | master |
develop |
---|---|---|
文档 |
||
矩阵 |
Boost.URL
概述
Boost.URL 是一个可移植的 C++ 库,它提供了容器和算法来建模一个“URL”,更正式地描述为统一资源标识符(URI)规范(下文称为 rfc3986)。URL 是一个紧凑的字符序列,用于标识抽象或物理资源。例如,这是一个符合绝对 URI 语法的有效 URL。
https://www.example.com/path/to/file.txt?userid=1001&page=2&results=full
该库理解与 URL 相关的各种语法,并提供字符串验证和解析、URL 字符串操作以及在 URL 上执行的算法,例如规范化和解析。虽然该库是通用的,但已特别注意确保实现和数据表示对需要高效安全地处理 URL 的网络程序友好,包括输入来自不受信任来源的情况。提供了使用错误码而非异常的接口,并且所有算法都提供了一种根据需要完全避免内存分配的机制。该库的另一个特点是所有容器的修改都会使 URL 保持有效状态。使用 Boost.URL 的代码易于阅读、灵活且高效。
网络程序,例如使用 Boost.Asio 或 Boost.Beast 的程序,经常需要处理、生成或修改 URL。该库为处理这些用例提供了非常急需的模块化组件。
示例
using namespace boost::urls;
// Parse a URL. This allocates no memory. The view
// references the character buffer without taking ownership.
//
url_view uv( "https://www.example.com/path/to/file.txt?id=1001&name=John%20Doe&results=full" );
// Print the query parameters with percent-decoding applied
//
for( auto v : uv.params() )
std::cout << v.key << "=" << v.value << " ";
// Prints: id=1001 name=John Doe results=full
// Create a modifiable copy of `uv`, with ownership of the buffer
//
url u = uv;
// Change some elements in the URL
//
u.set_scheme( "http" )
.set_encoded_host( "boost.org" )
.set_encoded_path( "/index.htm" )
.remove_query()
.remove_fragment()
.params().append( {"key", "value"} );
std::cout << u;
// Prints: https://boost.ac.cn/index.htm?key=value
设计目标
该库实现了这些目标:
-
仅需要 C++11
-
无异常工作
-
编译速度快,无模板
-
严格遵守 rfc3986
-
分配内存或使用内联存储
-
可选的仅头文件,无需链接库
要求
-
需要 Boost 和支持至少 C++11 的编译器
-
标准类型的别名使用其 Boost 等效类型
-
链接到已构建的静态或动态 Boost 库,或使用头文件(见下文)
-
支持 -fno-exceptions,自动检测
仅头文件
要将其用作头文件库,即消除将程序链接到静态或动态 Boost.URL 库的要求,只需在你项目的*.cpp*文件中包含以下行:
#include <boost/url/src.hpp>
嵌入式
Boost.URL 在嵌入式设备上运行良好。它可以以一种避免所有动态内存分配的方式使用。此外,它还可以根据需要设计为在没有异常的情况下工作。
支持的编译器
Boost.URL 使用以下编译器进行测试:
-
clang:3.8、4、5、6、7、8、9、10、11、12
-
gcc:4.8、4.9、5、6、7、8、9、10、11
-
msvc: 14.0, 14.1, 14.2, 14.3
以及这些架构:x86、x64、ARM64、S390x
质量保证
该库的开发基础设施包括以下提交即分析:
-
覆盖率报告
-
基准性能比较
-
在 Drone.io 上编译和测试
Visual Studio 解决方案生成
cmake -G "Visual Studio 16 2019" -A Win32 -B bin -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/msvc.cmake cmake -G "Visual Studio 16 2019" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/msvc.cmake
License
根据 Boost Software License, Version 1.0 分发。(请参阅随附的 LICENSE_1_0.txt 文件或访问 https://boost.ac.cn/LICENSE_1_0.txt)