Pular para o conteúdo

27 · Biblioteca Padrão

URLs (std::url)

Parse, codificação percentual e construção de query strings com std::url.

Nesta página

std::url oferece utilitários puros para trabalhar com endereços web: decomposição em partes, codificação e decodificação percentual, e montagem de query strings. Como todas as operações são computações locais (sem rede nem sistema de arquivos), os exemplos rodam diretamente no sandbox.


Parse de URL

url.parse desmembra um endereço em protocol, host, port, path, query, fragment e um mapa params com os parâmetros já decodificados.

Extrai cada componente de uma URL completa, incluindo params.

01-parse.zolo
Playground
// 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

Codificação e decodificação percentual

url.encode / url.decode tratam espaços e caracteres especiais; a variante encode_component / decode_component é mais agressiva e também escapa /, ? e # — ideal para valores dentro de uma query string.

Vai-e-vem entre string bruta e representação percent-encoded.

02-encode-decode.zolo
Playground
// 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

Construção de query strings

Combine url.encode_component com concatenação e Array.join para montar query strings dinamicamente sem depender de bibliotecas externas.

Parse de params existentes e construção manual de query string codificada.

03-query-string.zolo
Playground
// 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

Desafio

A partir de um mapa #{ q: "zolo lang", page: 1 }, escreva uma função to_query_string que itere as chaves e produza q=zolo%20lang&page=1.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br