from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

Appelez la méthode open propre à cet opener lorsqu'une route appartient à la sonde. Le point de terminaison HTTP de l'exemple peut venir de votre service ou de la liste de proxy HTTP pour les sondes publiques. Le fragment illustre la propriété ; il ne définit pas la politique complète d'authentification ou de santé. Gardez tout gestionnaire propre au compte attaché au client prévu.

urllib.request.install_opener() modifie la valeur par défaut à l'échelle du processus utilisée par les appels urlopen() ultérieurs au niveau module. Un vérificateur qui parcourt les proxys peut donc laisser des requêtes sans rapport utiliser son dernier point de terminaison. Une installation temporaire et une restauration lors du nettoyage permettent encore aux requêtes concurrentes de s'exécuter pendant la mutation partagée.

socket.setdefaulttimeout() modifie de même les valeurs par défaut des sockets créés ensuite. Utilisez le délai au niveau de l'opération lorsque seule la sonde doit le recevoir.

Fermez les réponses de la sonde et gardez leurs résultats précis : une réponse d'erreur HTTP n'est pas automatiquement un écouteur de proxy mort. Si une sonde urllib synchrone est utilisée dans un service asynchrone, déplacez le travail bloquant vers un worker approprié ; cette décision d'exécution ne rend pas la mutation globale de l'opener isolée.

Une sonde doit renvoyer son observation sans laisser une autre politique réseau derrière elle. Son propre objet client et son opération bornée rendent cette frontière explicite.

Articles similaires