Uniform Resource Location
Parse a URL from a string to a Url
type
The parse
method from the url
crate validates and parses a &str
into a
Url
struct. The input string may be malformed so this method returns
Result<Url, ParseError>
.
Once the URL has been parsed, it can be used with all of the methods in the
Url
type.
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(())
}
Create a base URL by removing path segments
A base URL includes a protocol and a domain. Base URLs have no folders,
files or query strings. Each of those items are stripped out of the given
URL. PathSegmentsMut::clear
removes paths and Url::set_query
removes
query string.
Create new URLs from a base URL
The join
method creates a new URL from a base and relative path.
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)
}
Extract the URL origin (scheme / host / port)
The Url
struct exposes various methods to extract information about the URL
it represents.
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
produces the same result.
Remove fragment identifiers and query pairs from a URL
Parses Url
and slices it with url::Position
to strip unneeded URL parts.
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(())
}