Обикновена стойност за прокси като 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.

Подобни статии