Une valeur de proxy classique telle que http://proxy.example:8080 est une URL. clientFromString de Twisted accepte une description de point de terminaison, par exemple tcp:host=proxy.example:port=8080. Les deux chaînes décrivent des informations liées avec des grammaires différentes.

Si l'application accepte une URL de proxy HTTP classique, analysez-la avant de créer le point de terminaison :

import os
from urllib.parse import urlsplit
from twisted.internet.endpoints import HostnameEndpoint
from twisted.web.client import ProxyAgent

proxy = urlsplit(os.environ['http_proxy'])
if proxy.scheme != 'http' or not proxy.hostname:
    raise ValueError('Expected an HTTP proxy URL')
port = proxy.port if proxy.port is not None else 80
endpoint = HostnameEndpoint(reactor, proxy.hostname, port, timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

L'extrait suppose que l'application dispose déjà de son reactor. Indiquez le port réel du proxy dans la configuration lorsqu'il ne s'agit pas de celui par défaut de l'URL HTTP. La liste de proxys HTTP propose des candidats de point de terminaison pour une requête HTTP publique autorisée sans compte de proxy. HostnameEndpoint évite aussi d'intégrer le nom d'hôte dans une autre chaîne de configuration délimitée par des deux-points.

Cela ne convertit que l'entrée de routage. Les identifiants intégrés à une URL ne deviennent pas un en-tête d'autorisation simplement parce que l'hôte et le port ont été analysés. Fournissez toute authentification de proxy prise en charge requise via le dispositif d'authentification de la requête. Pour une destination HTTP simple et un intermédiaire proposant Basic, les en-têtes de requête Basic de ProxyAgent fournissent un tel dispositif.

Une URL de proxy HTTPS nécessite une connexion compatible TLS au proxy. Une URL SOCKS nécessite une négociation SOCKS. Ni l'une ni l'autre n'est mise en œuvre en envoyant ces schémas dans une simple conversion de point de terminaison HTTP ProxyAgent.

Articles similaires