En vanlig proxyverdi som http://proxy.example:8080 er en URL. clientFromString i Twisted godtar en endepunktbeskrivelse, som tcp:host=proxy.example:port=8080. De to strengene beskriver beslektet informasjon med forskjellige grammatikker.

Hvis applikasjonen godtar en vanlig HTTP-proxy-URL, del den opp før endepunktet opprettes:

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)

Utdraget forutsetter at applikasjonen allerede har sin reactor. Angi den virkelige proxyporten i konfigurasjonen når den ikke er HTTP-URL-ens standard. HTTP-proxylisten tilbyr endepunktkandidater for en tillatt offentlig HTTP-forespørsel uten proxykonto. HostnameEndpoint unngår også å bygge vertsnavnet inn i en annen kolonadelt konfigurasjonsstreng.

Dette konverterer bare rutinginndataene. Legitimasjon som er bygget inn i en URL, blir ikke en autorisasjonsheader bare fordi verten og porten ble delt opp. Oppgi eventuell påkrevd støttet proxyautentisering gjennom forespørselens autentiseringsopplegg. For et vanlig HTTP-mål og en mellommann som tilbyr Basic, gir ProxyAgents Basic-forespørselsheadere et slikt opplegg.

En HTTPS-proxy-URL krever en TLS-kapabel forbindelse til proxyen. En SOCKS-URL krever SOCKS-forhandling. Ingen av dem implementeres ved å sende disse skjemaene inn i en vanlig HTTP-ProxyAgent-endepunktkonvertering.

Relaterte artikler