Звичайне значення проксі, наприклад http://proxy.example:8080, — це URL. clientFromString у Twisted приймає опис кінцевої точки, наприклад tcp:host=proxy.example:port=8080. Два рядки описують пов'язану інформацію різними граматиками.

Якщо застосунок приймає звичайний URL HTTP-проксі, розберіть його перед створенням кінцевої точки:

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. Укажіть реальний порт проксі в конфігурації, коли він не є стандартним для URL HTTP. Список HTTP-проксі пропонує кандидатів у кінцеві точки для дозволеного публічного HTTP-запиту без облікового запису проксі. HostnameEndpoint також уникає вбудовування імені хоста в інший рядок конфігурації, розділений двокрапками.

Це перетворює лише вхідні дані маршрутизації. Облікові дані, вбудовані в URL, не стають заголовком авторизації лише тому, що хост і порт було розібрано. Надайте будь-яку потрібну підтримувану автентифікацію проксі через схему автентифікації запиту. Для простого HTTP-призначення й посередника, що пропонує Basic, заголовки запиту Basic у ProxyAgent дають одну таку схему.

URL HTTPS-проксі потребує з'єднання з проксі, яке підтримує TLS. URL SOCKS потребує узгодження SOCKS. Ні те, ні інше не реалізується надсиланням цих схем у просте перетворення кінцевої точки HTTP ProxyAgent.

Схожі статті