std.net.url
std.net.url
parse_url splits a URL into its components, url.* parses/builds and
percent-encodes. No network request is made — it is pure string handling.
Usage
var u = std.net.parse_url("http://example.com:8080/path/to?q=1#frag")
print(u.scheme) # http
print(u.host) # example.com
print(u.port) # 8080 (number)
print(u.path) # /path/to?q=1#frag (path + query + fragment as one string)
var v = std.net.parse_url("ws://echo.example/socket")
print(v.scheme) # ws
print(v.host) # echo.example
var w = std.net.parse_url("https://example.com/")
print(w.port) # 443 — the default port when none is given
Return object
| Field | Type | Description |
|---|---|---|
scheme |
string | "http", "ws", etc. |
host |
string | Hostname or IP |
port |
int | Port — the explicit one, or the scheme default (80 for http/ws, 443 for https/wss) |
path |
string | Path including ?query and #fragment |
If the URL is malformed the call throws — handle it like any other error (see Errors). Parsing a wss:// URL also throws UNSUPPORTED on builds without OpenSSL.
The url sub-module
std.net.url adds finer-grained parsing, building, and encoding helpers:
| Function | Purpose |
|---|---|
url.parse(s) |
Like parse_url but splits query and fragment into their own fields |
url.encode(s) |
Percent-encode a string (encodeURIComponent behavior — unreserved chars pass through) |
url.decode(s) |
Decode percent escapes; + is preserved literally |
url.decode_form(s) |
Decode form data — + becomes space |
url.build({scheme, host, port, path, query, fragment}) |
Assemble a URL string; omits default ports (80/443) and empty components |
var parts = std.net.url.parse("http://example.com/a?b=1&c=2#top")
print(parts.path) # /a
print(parts.query) # b=1&c=2
print(parts.fragment) # top
print(std.net.url.encode("a b&c")) # a%20b%26c
print(std.net.url.decode("a%20b%26c")) # a b&c
print(std.net.url.decode_form("a+b")) # a b ('+' is a space)
print(std.net.url.build({host: "example.com", path: "/x", query: "q=1"}))
# http://example.com/x?q=1
Tips
- Use with HTTP Client to validate or rewrite URLs before
request({url: ...}). - Combine with DNS if you need to resolve
u.hostmanually, though clients normally resolve for you.