Mojo::URL - Uniform Resource Locator

NAME  SYNOPSIS  DESCRIPTION  ATTRIBUTES  base  fragment  host  port  scheme  userinfo  METHODS  clone  host_port  ihost  is_abs  new  parse  password  path  path_query  protocol  query  to_abs  to_string  to_unsafe_string  username  OPERATORS  bool  stringify  SEE ALSO 

NAME

Mojo::URL − Uniform Resource Locator

SYNOPSIS

use Mojo::URL;
# Parse
my $url = Mojo::URL−>new('http://sri:[email protected]:3000/foo?foo=bar#23');
say $url−>scheme;
say $url−>userinfo;
say $url−>host;
say $url−>port;
say $url−>path;
say $url−>query;
say $url−>fragment;
# Build
my $url = Mojo::URL−>new;
$url−>scheme('http');
$url−>host('example.com');
$url−>port(3000);
$url−>path('/foo/bar');
$url−>query(foo => 'bar');
$url−>fragment(23);
say "$url";

DESCRIPTION

Mojo::URL implements a subset of RFC 3986 <https://tools.ietf.org/html/rfc3986>, RFC 3987 <https://tools.ietf.org/html/rfc3987> and the URL Living Standard <https://url.spec.whatwg.org> for Uniform Resource Locators with support for IDNA and IRIs.

ATTRIBUTES

Mojo::URL implements the following attributes.

base

my $base = $url−>base;
$url = $url−>base(Mojo::URL−>new);

Base of this URL, defaults to a Mojo::URL object.

"http://example.com/a/b?c"
Mojo::URL−>new("/a/b?c")−>base(Mojo::URL−>new("http://example.com"))−>to_abs;

fragment

my $fragment = $url−>fragment;
$url = $url−>fragment('â¥mojoliciousâ¥');

Fragment part of this URL.

# "yada"
Mojo::URL−>new('http://example.com/foo?bar=baz#yada')−>fragment;

host

my $host = $url−>host;
$url = $url−>host('127.0.0.1');

Host part of this URL.

# "example.com"
Mojo::URL−>new('http://sri:[email protected]:8080/foo')−>host;

port

my $port = $url−>port;
$url = $url−>port(8080);

Port part of this URL.

# "8080"
Mojo::URL−>new('http://sri:[email protected]:8080/foo')−>port;

scheme

my $scheme = $url−>scheme;
$url = $url−>scheme('http');

Scheme part of this URL.

# "http"
Mojo::URL−>new('http://example.com/foo')−>scheme;

userinfo

my $info = $url−>userinfo;
$url = $url−>userinfo('root:â¥');

Userinfo part of this URL.

# "sri:t3st"
Mojo::URL−>new('https://sri:[email protected]/foo')−>userinfo;

METHODS

Mojo::URL inherits all methods from Mojo::Base and implements the following new ones.

clone

my $url2 = $url−>clone;

Return a new Mojo::URL object cloned from this URL.

host_port

my $host_port = $url−>host_port;
$url = $url−>host_port('example.com:8080');

Normalized version of "host" and "port".

# "xn−−n3h.net:8080"
Mojo::URL−>new('http://â.net:8080/test')−>host_port;
# "example.com"
Mojo::URL−>new('http://example.com/test')−>host_port;

ihost

my $ihost = $url−>ihost;
$url = $url−>ihost('xn−−bcher−kva.ch');

Host part of this URL in punycode format.

# "xn−−n3h.net"
Mojo::URL−>new('http://â.net')−>ihost;
# "example.com"
Mojo::URL−>new('http://example.com')−>ihost;

is_abs

my $bool = $url−>is_abs;

Check if URL is absolute.

# True
Mojo::URL−>new('http://example.com')−>is_abs;
Mojo::URL−>new('http://example.com/test/index.html')−>is_abs;
# False
Mojo::URL−>new('test/index.html')−>is_abs;
Mojo::URL−>new('/test/index.html')−>is_abs;
Mojo::URL−>new('//example.com/test/index.html')−>is_abs;

new

my $url = Mojo::URL−>new;
my $url = Mojo::URL−>new('http://127.0.0.1:3000/foo?f=b&baz=2#foo');

Construct a new Mojo::URL object and "parse" URL if necessary.

parse

$url = $url−>parse('http://127.0.0.1:3000/foo/bar?fo=o&baz=23#foo');

Parse relative or absolute URL.

# "/test/123"
$url−>parse('/test/123?foo=bar')−>path;
# "example.com"
$url−>parse('http://example.com/test/123?foo=bar')−>host;
# "[email protected]"
$url−>parse('mailto:[email protected]')−>path;

password

my $password = $url−>password;

Password part of "userinfo".

# "s3cret"
Mojo::URL−>new('http://isabel:[email protected]')−>password;
# "s:3:c:r:e:t"
Mojo::URL−>new('http://isabel:s:3:c:r:e:[email protected]')−>password;

path

my $path = $url−>path;
$url = $url−>path('foo/bar');
$url = $url−>path('/foo/bar');
$url = $url−>path(Mojo::Path−>new);

Path part of this URL, relative paths will be merged with "merge" in Mojo::Path, defaults to a Mojo::Path object.

# "test"
Mojo::URL−>new('http://example.com/test/Mojo')−>path−>parts−>[0];
# "/test/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo')−>path−>merge('DOM/HTML');
# "http://example.com/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo')−>path('/DOM/HTML');
# "http://example.com/test/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo')−>path('DOM/HTML');
# "http://example.com/test/Mojo/DOM/HTML"
Mojo::URL−>new('http://example.com/test/Mojo/')−>path('DOM/HTML');

path_query

my $path_query = $url−>path_query;
$url = $url−>path_query('/foo/bar?a=1&b=2');

Normalized version of "path" and "query".

# "/test?a=1&b=2"
Mojo::URL−>new('http://example.com/test?a=1&b=2')−>path_query;
# "/"
Mojo::URL−>new('http://example.com/')−>path_query;

protocol

my $proto = $url−>protocol;

Normalized version of "scheme".

# "http"
Mojo::URL−>new('HtTp://example.com')−>protocol;

query

my $query = $url−>query;
$url = $url−>query({merge => 'to'});
$url = $url−>query([append => 'with']);
$url = $url−>query(replace => 'with');
$url = $url−>query('a=1&b=2');
$url = $url−>query(Mojo::Parameters−>new);

Query part of this URL, key/value pairs in an array reference will be appended with "append" in Mojo::Parameters, and key/value pairs in a hash reference merged with "merge" in Mojo::Parameters, defaults to a Mojo::Parameters object.

# "2"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query−>param('b');
# "a=2&b=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query−>merge(a => 2, c => 3);
# "http://example.com?a=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query(a => 2, c => 3);
# "http://example.com?a=2&a=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query(a => [2, 3]);
# "http://example.com?a=2&b=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query({a => 2, c => 3});
# "http://example.com?b=2"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query({a => undef});
# "http://example.com?a=1&b=2&a=2&c=3"
Mojo::URL−>new('http://example.com?a=1&b=2')−>query([a => 2, c => 3]);

to_abs

my $abs = $url−>to_abs;
my $abs = $url−>to_abs(Mojo::URL−>new('http://example.com/foo'));

Return a new Mojo::URL object cloned from this relative URL and turn it into an absolute one using "base" or provided base URL.

# "http://example.com/foo/baz.xml?test=123"
Mojo::URL−>new('baz.xml?test=123')
−>to_abs(Mojo::URL−>new('http://example.com/foo/bar.html'));
# "http://example.com/baz.xml?test=123"
Mojo::URL−>new('/baz.xml?test=123')
−>to_abs(Mojo::URL−>new('http://example.com/foo/bar.html'));
# "http://example.com/foo/baz.xml?test=123"
Mojo::URL−>new('//example.com/foo/baz.xml?test=123')
−>to_abs(Mojo::URL−>new('http://example.com/foo/bar.html'));

to_string

my $str = $url−>to_string;

Turn URL into a string. Note that "userinfo" will not be included for security reasons.

# "http://mojolicious.org"
Mojo::URL−>new−>scheme('http')−>host('mojolicious.org')−>to_string;
# "http://mojolicious.org"
Mojo::URL−>new('http://daniel:[email protected]')−>to_string;

to_unsafe_string

my $str = $url−>to_unsafe_string;

Same as "to_string", but includes "userinfo".

# "http://daniel:[email protected]"
Mojo::URL−>new('http://daniel:[email protected]')−>to_unsafe_string;

username

my $username = $url−>username;

Username part of "userinfo".

# "isabel"
Mojo::URL−>new('http://isabel:[email protected]')−>username;

OPERATORS

Mojo::URL overloads the following operators.

bool

my $bool = !!$url;

Always true.

stringify

my $str = "$url";

Alias for "to_string".

SEE ALSO

Mojolicious, Mojolicious::Guides, <https://mojolicious.org>.


Updated 2024-01-29 - jenkler.se | uex.se