Претворите HTTP прокси URL у Twisted крајњу тачку
Раздвојите уобичајени HTTP прокси URL на домаћина и порт уместо да га прослеђујете као граматику описа крајње тачке у Twisted-у.
Уобичајена вредност проксија као што је http://proxy.example:8080 је URL. clientFromString у Twisted-у прихвата опис крајње тачке, попут tcp:host=proxy.example:port=8080. Два низа описују повезане информације различитим граматикама.
Ако апликација прихвата уобичајени HTTP прокси URL, раздвојите га пре стварања крајње тачке:
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)
Исечак претпоставља да апликација већ има свој reactor. Наведите стварни порт проксија у конфигурацији када он није подразумевани за HTTP URL. Листа HTTP проксија нуди кандидате за крајње тачке за дозвољени јавни HTTP захтев без налога за прокси. HostnameEndpoint такође избегава уграђивање имена домаћина у други конфигурациони низ раздвојен двотачкама.
Ово претвара само улаз за усмеравање. Акредитиви уграђени у URL не постају заглавље за ауторизацију само зато што су домаћин и порт раздвојени. Обезбедите било коју потребну подржану аутентификацију проксија кроз механизам аутентификације захтева. За обично HTTP одредиште и посредника који нуди Basic, Basic заглавља захтева у ProxyAgent-у пружају један такав механизам.
HTTPS прокси URL захтева везу са проксијем која подржава TLS. SOCKS URL захтева SOCKS преговоре. Ниједно се не имплементира слањем тих шема у једноставну конверзију крајње тачке HTTP ProxyAgent.