Gør en HTTP-proxy-URL til et Twisted-endpoint
Opdel en almindelig HTTP-proxy-URL i vært og port i stedet for at sende den som Twisted-endpointbeskrivelsens grammatik.
En almindelig proxyværdi som http://proxy.example:8080 er en URL. Twisted's clientFromString accepterer en endpointbeskrivelse som tcp:host=proxy.example:port=8080. De to strenge beskriver beslægtet information med forskellige grammatikker.
Hvis applikationen accepterer en almindelig HTTP-proxy-URL, skal du opdele den, før endpointet oprettes:
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)
Uddraget forudsætter, at applikationen allerede har sin reactor. Angiv den rigtige proxyport i konfigurationen, når den ikke er HTTP-URL'ens standard. HTTP-proxylisten tilbyder endpointkandidater til en tilladt offentlig HTTP-anmodning uden proxykonto. HostnameEndpoint undgår også at indlejre værtsnavnet i endnu en kolonadskilt konfigurationsstreng.
Dette konverterer kun routinginputtet. Legitimationsoplysninger indlejret i en URL bliver ikke en autorisationsheader, blot fordi vært og port blev opdelt. Angiv enhver påkrævet understøttet proxygodkendelse via anmodningens godkendelsesordning. Til en almindelig HTTP-destination og en mellemmand, der tilbyder Basic, giver ProxyAgents Basic-anmodningsheadere en sådan ordning.
En HTTPS-proxy-URL kræver en TLS-kapabel forbindelse til proxyen. En SOCKS-URL kræver SOCKS-forhandling. Ingen af dem implementeres ved at sende disse skemaer ind i en almindelig HTTP-ProxyAgent-endpointkonvertering.