ProxyAgent подключается через переданный ему endpoint. Для обычного HTTP-запроса и прокси, принимающего базовую аутентификацию, поместите логин прокси в заголовок Proxy-Authorization этого запроса.

import base64
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.web.client import ProxyAgent
from twisted.web.http_headers import Headers

endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
                              timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
token = base64.b64encode(b'alice:REPLACE_WITH_PROXY_PASSWORD')
headers = Headers({b'Proxy-Authorization': [b'Basic ' + token]})
pending = agent.request(b'GET', b'http://example.com/', headers)

Этот фрагмент предполагает, что у приложения уже есть свой reactor. Метод, URI и показанные данные заголовка используют байты. Храните настоящие учётные данные в источнике учётных данных приложения; заполнитель лишь показывает, как строится заголовок. Base64 — это кодирование, поэтому конфиденциальность зависит от соединения, которое его передаёт.

Возвращённый Deferred даёт объект ответа. Получение этого объекта не собирает тело ответа; читайте его через документированный интерфейс чтения тела и обрабатывайте асинхронные ошибки. Тайм-аут endpoint ограничивает установление соединения, а не всё время жизни ответа.

В примере намеренно используется HTTP-назначение. Он не добавляет согласование CONNECT для HTTPS только за счёт смены схемы URI.

Похожие статьи