Aller au contenu

Communiquer sur le réseau

urllib.request : requêtes HTTP

urlopen() ouvre une URL. Request permet de préciser la méthode, les données et les en-têtes.

from urllib.request import Request, urlopen

request = Request(
    "https://www.python.org/",
    headers={"User-Agent": "PythonStandardLibraryExample/1.0"},
)

with urlopen(request, timeout=10) as response:
    print(response.status)
    content = response.read().decode("utf-8")
    print(content[:80])

Cet exemple nécessite un accès réseau. L'encodage doit correspondre à la réponse reçue. Les erreurs HTTP et réseau sont notamment représentées par HTTPError et URLError, dans urllib.error. Les bibliothèques tierces requests et httpx ne font pas partie de la bibliothèque standard.

Parallèle C# et .NET

using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) };
client.DefaultRequestHeaders.UserAgent.ParseAdd("PythonStandardLibraryExample/1.0");
using HttpResponseMessage response = await client.GetAsync("https://www.python.org/");
response.EnsureSuccessStatusCode();
Console.WriteLine((int)response.StatusCode);
string content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content[..Math.Min(80, content.Length)]);

HttpClient est le point de départ courant pour HTTP en .NET. L’exemple réalise une requête asynchrone alors que urlopen() est bloquant. EnsureSuccessStatusCode() explicite la validation du statut. Dans une application durable, réutilisons les clients ou utilisons une fabrique configurée ; le using montré convient à cette démonstration isolée.

urllib.parse : construire et décomposer des URL

Fonction Usage
urlencode() Construire une chaîne de paramètres.
urlsplit() / urlparse() Décomposer une URL.
parse_qs() Lire des paramètres de requête.
quote() / unquote() Encoder / décoder un composant.
urljoin() Résoudre une référence à partir d'une URL de base.
from urllib.parse import urlencode, urlsplit, parse_qs

query = urlencode({"q": "cours Python", "page": 1})
url = "https://example.com/search?" + query
parts = urlsplit(url)
print(parts.hostname)               # example.com
print(parse_qs(parts.query)["q"])  # ['cours Python']

Décomposer une URL ne valide pas sa fiabilité. Un composant fourni par l'extérieur peut aussi modifier la destination d'un urljoin().

Parallèle C# et .NET

string query = "q=" + Uri.EscapeDataString("cours Python") + "&page=1";
var url = new Uri("https://example.com/search?" + query);
Console.WriteLine(url.Host); // example.com
Console.WriteLine(Uri.UnescapeDataString(query.Split('&')[0].Split('=')[1]));
// cours Python

Uri, UriBuilder et les fonctions d’échappement couvrent la construction et l’analyse. Le décodage montré vise seulement la requête que nous venons de construire ; ce n’est pas un parseur général. urlencode() encode couramment les espaces avec +, tandis que EscapeDataString() produit %20. Les aides ASP.NET Core ou d’autres API de requêtes proposent une lecture multivaleur proche de parse_qs().