Zamiana adresu URL serwera proxy HTTP na punkt końcowy Twisted
Podziel konwencjonalny adres URL serwera proxy HTTP na host i port, zamiast przekazywać go jako gramatykę opisu punktu końcowego Twisted.
Konwencjonalna wartość serwera proxy, taka jak http://proxy.example:8080, jest adresem URL. clientFromString w Twisted przyjmuje opis punktu końcowego, na przykład tcp:host=proxy.example:port=8080. Oba ciągi opisują powiązane informacje za pomocą różnych gramatyk.
Jeśli aplikacja przyjmuje konwencjonalny adres URL serwera proxy HTTP, podziel go przed utworzeniem punktu końcowego:
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)
Fragment zakłada, że aplikacja ma już swój reactor. Podaj rzeczywisty port serwera proxy w konfiguracji, gdy nie jest to domyślny port adresu HTTP. Lista serwerów proxy HTTP oferuje kandydatów na punkty końcowe dla dozwolonego publicznego żądania HTTP bez konta proxy. HostnameEndpoint pozwala też uniknąć osadzania nazwy hosta w innym ciągu konfiguracyjnym rozdzielanym dwukropkami.
To konwertuje tylko dane wejściowe routingu. Poświadczenia osadzone w adresie URL nie stają się nagłówkiem autoryzacji tylko dlatego, że host i port zostały podzielone. Zapewnij wymagane obsługiwane uwierzytelnianie serwera proxy przez mechanizm uwierzytelniania żądania. Dla zwykłego celu HTTP i pośrednika oferującego Basic nagłówki żądania Basic w ProxyAgent zapewniają taki mechanizm.
Adres URL serwera proxy HTTPS wymaga połączenia z serwerem proxy obsługującego TLS. Adres URL SOCKS wymaga negocjacji SOCKS. Żadne z nich nie jest realizowane przez przesłanie tych schematów do zwykłej konwersji punktu końcowego HTTP ProxyAgent.