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.