URLs (std::url)
En esta página
std::url ofrece utilidades puras para trabajar con direcciones web:
descomposición en partes, codificación y decodificación porcentual, y construcción
de query strings. Como todas las operaciones son cómputos locales (sin red ni
sistema de archivos), los ejemplos se ejecutan directamente en el sandbox.
Parsing de URL
url.parse descompone una dirección en protocol, host, port, path,
query, fragment y un mapa params con los parámetros ya decodificados.
Extrae cada componente de una URL completa, incluidos los params.
// Feature: url.parse — break a URL into protocol, host, port, path, query, fragment
// When to use: extract parts of an address for routing, validation, or logging.
use std::url
let parts = url.parse("https://api.example.com:8443/users/42?id=42&active=true#bio")
print(parts["protocol"]) // expected: https
print(parts["host"]) // expected: api.example.com
print(parts["port"]) // expected: 8443
print(parts["path"]) // expected: /users/42
print(parts["query"]) // expected: id=42&active=true
print(parts["fragment"]) // expected: bio
// Query params are already parsed into params.
print(parts["params"]["id"]) // expected: 42
print(parts["params"]["active"]) // expected: true
Codificación y decodificación porcentual
url.encode / url.decode gestionan espacios y caracteres especiales; la
variante encode_component / decode_component es más agresiva y también
escapa /, ? y # — ideal para valores dentro de una query string.
Ida y vuelta entre una cadena cruda y su representación percent-encoded.
// Feature: url.encode / url.decode — percent-encoding
// When to use: pass strings with spaces or special characters in URLs.
use std::url
// encode applies percent-encoding to non-safe characters.
let raw = "hello world & friends"
let enc = url.encode(raw)
print(enc) // expected: hello%20world%20%26%20friends
// decode reverses the operation.
print(url.decode(enc)) // expected: hello world & friends
// encode_component is more aggressive — it also escapes /, ?, #.
let comp = url.encode_component("a/b?c=d")
print(comp) // expected: a%2Fb%3Fc%3Dd
let back = url.decode_component(comp)
print(back) // expected: a/b?c=d
Construcción de query strings
Combina url.encode_component con concatenación y Array.join para construir
query strings de forma dinámica sin depender de bibliotecas externas.
Parsing de params existentes y construcción manual de una query string codificada.
// Feature: url — build and parse query strings
// When to use: HTTP clients, links with filters, pagination.
use std::url
// Parse: query string already comes in `params` when using url.parse.
let parts = url.parse("https://api.example.com/search?q=zolo+lang&page=2&limit=20")
print(parts["params"]["q"]) // expected: zolo+lang
print(parts["params"]["page"]) // expected: 2
print(parts["params"]["limit"]) // expected: 20
// Manual construction: join "k=v" pairs with "&".
fn build_query(pairs: [str]) -> str {
return pairs.join("&")
}
let qs = build_query([
"q=" + url.encode_component("hello world"),
"page=1",
"active=true",
])
print(qs) // expected: q=hello%20world&page=1&active=true
Desafío
A partir de un mapa #{ q: "zolo lang", page: 1 }, escribe una función
to_query_string que itere las claves y produzca q=zolo%20lang&page=1.
Consulta también