Network API
URL, IP, and host/port parsing helpers are available under ptool.net and p.net.
ptool.net.parse_url
v0.2.0- Introduced.
ptool.net.parse_url(input) parses a URL string and returns a normalized parts
table.
Arguments:
input(string, required): The URL to parse.
Returns: A table with the following fields:
kind(string): Always"url".input(string): The original input string.normalized(string): The normalized URL string.scheme(string): The URL scheme.username(string, optional): The decoded username, if present.password(string, optional): The decoded password, if present.host(string, optional): The hostname or IP literal, if present.host_kind("domain"|"ipv4"|"ipv6", optional): The host classification, if a host is present.port(integer, optional): The explicit port, if present.path(string): The URL path.query(string, optional): The query string without the leading?.fragment(string, optional): The fragment without the leading#.
local parts = ptool.net.parse_url("https://user:[email protected]:8443/a/b?q=1#frag")
print(parts.scheme) -- https
print(parts.host_kind) -- domain
print(parts.port) -- 8443
print(parts.path) -- /a/b
print(parts.query) -- q=1
print(parts.fragment) -- frag
ptool.net.parse_ip
v0.2.0- Introduced.
ptool.net.parse_ip(input) parses an IPv4 or IPv6 address and returns a
normalized parts table.
Arguments:
input(string, required): The IP address to parse.
Returns: A table with the following fields:
kind(string): Always"ip".input(string): The original input string.normalized(string): The normalized IP address.version(integer):4for IPv4 or6for IPv6.
local parts = ptool.net.parse_ip("2001:0db8::1")
print(parts.normalized) -- 2001:db8::1
print(parts.version) -- 6
ptool.net.parse_host_port
v0.2.0- Introduced.
ptool.net.parse_host_port(input) parses a host:port string and returns a
normalized parts table.
Arguments:
input(string, required): The host and port string. IPv6 addresses must use bracket notation such as[2001:db8::1]:443.
Returns: A table with the following fields:
kind(string): Always"host_port".input(string): The original input string.normalized(string): The normalizedhost:portstring.host(string): The normalized host value.host_kind("domain"|"ipv4"|"ipv6"): The host classification.port(integer): The parsed port.
local parts = ptool.net.parse_host_port("[2001:0db8::1]:443")
print(parts.host) -- 2001:db8::1
print(parts.host_kind) -- ipv6
print(parts.normalized) -- [2001:db8::1]:443
print(parts.port) -- 443