Běžná hodnota proxy, například http://proxy.example:8080, je URL. clientFromString v Twisted přijímá popis koncového bodu, například tcp:host=proxy.example:port=8080. Oba řetězce popisují související informace různými gramatikami.

Pokud aplikace přijímá běžnou URL HTTP proxy, rozdělte ji před vytvořením koncového bodu:

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)

Úryvek předpokládá, že aplikace už má svůj reactor. Pokud port není výchozí pro URL HTTP, uveďte v konfiguraci skutečný port proxy. Seznam HTTP proxy nabízí kandidáty na koncové body pro povolený veřejný HTTP požadavek bez účtu proxy. HostnameEndpoint se také vyhýbá vložení názvu hostitele do dalšího konfiguračního řetězce odděleného dvojtečkami.

Tím se převádí pouze vstup pro směrování. Přihlašovací údaje vložené do URL se nestanou autorizační hlavičkou jen proto, že byl hostitel a port rozdělen. Zajistěte požadované podporované ověření proxy prostřednictvím způsobu ověřování požadavku. Pro jednoduchý cíl HTTP a zprostředkovatele nabízejícího Basic poskytují hlavičky požadavku Basic v ProxyAgent jedno takové řešení.

URL proxy HTTPS vyžaduje připojení k proxy schopné TLS. URL SOCKS vyžaduje vyjednávání SOCKS. Ani jedno není implementováno předáním těchto schémat do jednoduché konverze koncového bodu HTTP ProxyAgent.

Související články