Pular para o conteúdo

URLs (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.

Buscar no Zolo

9 resultados

enespt-br