← retour aux snippets

urllib.parse: construire des URLs proprement

Assembler base, chemin et query string sans concaténation fragile.

objectif

Assembler base, chemin et query string sans concaténation fragile.

code minimal

from urllib.parse import urljoin, urlencode

base = "https://api.data.pm/v1/"
path = "users"
qs = urlencode({"page": 2, "q": "Ada Lovelace"})
url = urljoin(base, path) + "?" + qs
print(url.startswith("https://api.data.pm/v1/users"))  # attendu: True

utilisation

from urllib.parse import urlparse, parse_qs
u = "https://host/x?x=1&y=2"
parsed = urlparse(u)
print(parse_qs(parsed.query)["y"] == ["2"])

variante(s) utile(s)

from urllib.parse import urlunparse, urlencode
url = urlunparse(("https", "host", "/p", "", urlencode({"a":1}), ""))
print(url == "https://host/p?a=1")

notes

  • urljoin gère les slashes en double.
  • urlencode échappe correctement les espaces et caractères spéciaux.