Звычайнае значэнне проксі, напрыклад 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.

Падобныя артыкулы