url

Codificação percent, manipulação de query strings e parsing/construção completa de URLs.

import url

Codificação de componente

url_encode_component(texto) → string

Codifica (percent-encode) um único componente, escapando caracteres reservados.

url_encode_component("a b&c")
-- Saída: "a%20b%26c"
url_decode_component(texto) → string

Decodifica um componente codificado (e transforma + em espaço).

url_decode_component("a%20b%26c")
-- Saída: "a b&c"

Utilitários de query

build_query(pares) → string

Constrói uma query string a partir de uma lista de pares [chave, valor], codificando cada parte.

build_query([["a", "1"], ["name", "bern lang"]])
-- Saída: "a=1&name=bern%20lang"
parse_query(query) → objeto

Faz parse de uma query string em um objeto de chaves e valores decodificados.

params = parse_query("a=1&name=bern%20lang")
params["name"]
-- Saída: "bern lang"

Operações de URL completa

parse_url(texto_url) → objeto

Faz parse de uma URL em scheme, host, port, path, query e fragment. Portas padrão são preenchidas para http (80) e https (443).

parsed = parse_url("http://example.com:8080/docs/api?x=1#top")
parsed["host"]
-- Saída: "example.com"
parsed["port"]
-- Saída: 8080
parsed["path"]
-- Saída: "/docs/api"
build_url(scheme, host, port, path, query, fragment) → string

Monta uma URL a partir de seus componentes. Uma porta igual à padrão do scheme é omitida.

build_url("https", "example.com", 443, "/hello", "a=1", "frag")
-- Saída: "https://example.com/hello?a=1#frag"

Juntando tudo

As peças combinam para uma ida e volta completa: fazer parse de uma URL, editar a query e reconstruí-la. Aqui adicionamos um parâmetro a um link existente:

Adicionando um parâmetro de query a uma URL

import url

original = "https://search.example.com/?q=bern"

u = parse_url(original)
params = parse_query(u["query"])
params["page"] = "2"

-- reconstrói a query a partir do objeto (agora maior)
new_query = build_query([["q", params["q"]], ["page", params["page"]]])

build_url(u["scheme"], u["host"], u["port"], u["path"], new_query, "")
-- Saída: "https://search.example.com/?q=bern&page=2"

E codificar entrada do usuário com segurança antes de colocá-la em um link:

Linkando um termo de busca com segurança

import url

term = "bern lang & friends"
"https://example.com/?q=" + url_encode_component(term)
-- Saída: "https://example.com/?q=bern%20lang%20%26%20friends"