URL
解析 URL 字符串为 Url
类型
url
crate 中的 parse
方法验证并解析 &str
切片为 Url
结构体。如果输入字符串的格式不正确,解析方法 parse
会返回 Result<Url, ParseError>
。
一旦 URL 被解析,它就可以使用 Url
结构体类型中的所有方法。
use url::{Url, ParseError};
fn main() -> Result<(), ParseError> {
let s = "https://github.com/rust-lang/rust/issues?labels=E-easy&state=open";
let parsed = Url::parse(s)?;
println!("The path part of the URL is: {}", parsed.path());
Ok(())
}
通过移除路径段创建基本 URL
基本 URL(base URL)包括协议和域名。但基本 URL(base URL)不包括目录、文件或查询字符串,这些项都可以从给定的 URL 中剥离出来。创建基本 URL(base URL)时,通过 PathSegmentsMut::clear
方法移除目录和文件路径,通过方法 Url::set_query
移除查询字符串。
从基本 URL 创建新 URLs
join
方法从基路径和相对路径创建新的 URL。
use url::{Url, ParseError};
fn main() -> Result<(), ParseError> {
let path = "/rust-lang/cargo";
let gh = build_github_url(path)?;
assert_eq!(gh.as_str(), "https://github.com/rust-lang/cargo");
println!("The joined URL is: {}", gh);
Ok(())
}
fn build_github_url(path: &str) -> Result<Url, ParseError> {
const GITHUB: &'static str = "https://github.com";
let base = Url::parse(GITHUB).expect("hardcoded URL is known to be valid");
let joined = base.join(path)?;
Ok(joined)
}
提取 URL 源(scheme / host / port)
Url
结构体定义了多种方法,以便于提取有关它所表示的 URL 的信息。
use url::{Url, Host, ParseError};
fn main() -> Result<(), ParseError> {
let s = "ftp://rust-lang.org/examples";
let url = Url::parse(s)?;
assert_eq!(url.scheme(), "ftp");
assert_eq!(url.host(), Some(Host::Domain("rust-lang.org")));
assert_eq!(url.port_or_known_default(), Some(21));
println!("The origin is as expected!");
Ok(())
}
origin
方法产生相同的结果。
从 URL 移除片段标识符和查询对
解析 Url
结构体,并使用 url::Position
枚举对其进行切片,以去除不需要的 URL 片段。
use url::{Url, Position, ParseError};
fn main() -> Result<(), ParseError> {
let parsed = Url::parse("https://github.com/rust-lang/rust/issues?labels=E-easy&state=open")?;
let cleaned: &str = &parsed[..Position::AfterPath];
println!("cleaned: {}", cleaned);
Ok(())
}