1个稳定版本
2.5.0 | 2024年1月18日 |
---|
#1352 在 解析器实现
在 squinn 中使用
360KB
6K SLoC
rust-url
Rust的URL库,基于URL标准。
如果您是从旧版本升级,请参阅UPGRADING.md。
lib.rs
:
rust-url是URL标准的Rust语言实现。
URL解析和数据结构
首先,URL解析可能会因各种原因失败,因此返回一个Result
。
use url::{Url, ParseError};
assert!(Url::parse("http://[:::1]") == Err(ParseError::InvalidIpv6Address))
让我们解析一个有效的URL并查看其组件。
use url::{Url, Host, Position};
let issue_list_url = Url::parse(
"https://github.com/rust-lang/rust/issues?labels=E-easy&state=open"
)?;
assert!(issue_list_url.scheme() == "https");
assert!(issue_list_url.username() == "");
assert!(issue_list_url.password() == None);
assert!(issue_list_url.host_str() == Some("github.com"));
assert!(issue_list_url.host() == Some(Host::Domain("github.com")));
assert!(issue_list_url.port() == None);
assert!(issue_list_url.path() == "/rust-lang/rust/issues");
assert!(issue_list_url.path_segments().map(|c| c.collect::<Vec<_>>()) ==
Some(vec!["rust-lang", "rust", "issues"]));
assert!(issue_list_url.query() == Some("labels=E-easy&state=open"));
assert!(&issue_list_url[Position::BeforePath..] == "/rust-lang/rust/issues?labels=E-easy&state=open");
assert!(issue_list_url.fragment() == None);
assert!(!issue_list_url.cannot_be_a_base());
有些URL被称为不能作为基础:它们没有用户名、密码、主机或端口,并且它们的"路径"是一个任意字符串,而不是由斜杠分隔的段
use url::Url;
let data_url = Url::parse("data:text/plain,Hello?World#")?;
assert!(data_url.cannot_be_a_base());
assert!(data_url.scheme() == "data");
assert!(data_url.path() == "text/plain,Hello");
assert!(data_url.path_segments().is_none());
assert!(data_url.query() == Some("World"));
assert!(data_url.fragment() == Some(""));
Serde
启用serde
功能以包含Deserialize
和Serialize
实现,以便对url::Url
进行序列化和反序列化。
基本URL
许多上下文允许URL引用,这些引用可以相对于一个基本URL。
<link rel="stylesheet" href="../main.css">
由于解析的URL是绝对的,因此解析相对URL需要提供一个基本URL。
use url::{Url, ParseError};
assert!(Url::parse("../main.css") == Err(ParseError::RelativeUrlWithoutBase))
使用join
方法对Url
进行操作,将其用作基本URL。
use url::Url;
let this_document = Url::parse("http://servo.github.io/rust-url/url/index.html")?;
let css_url = this_document.join("../main.css")?;
assert_eq!(css_url.as_str(), "http://servo.github.io/rust-url/main.css");
功能:serde
如果您启用了 serde
功能,Url
将实现 serde::Serialize
和 serde::Deserialize
。有关更多信息,请参阅 serde 文档。
url = { version = "2", features = ["serde"] }
功能:debugger_visualizer
如果您启用了 debugger_visualizer
功能,则 url
包将包含一个 natvis 文件,用于 Visual Studio,允许您在调试器中查看 Url
对象。
此功能需要 Rust 1.71 或更高版本。
url = { version = "2", features = ["debugger_visualizer"] }
依赖项
~3–4.5MB
~103K SLoC