Um valor de proxy convencional como http://proxy.example:8080 é um URL. O clientFromString do Twisted aceita uma descrição de endpoint, como tcp:host=proxy.example:port=8080. As duas cadeias descrevem informações relacionadas com gramáticas diferentes.

Se a aplicação aceita um URL de proxy HTTP convencional, divida-o antes de criar o endpoint:

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)

O trecho pressupõe que a aplicação já tenha o seu reactor. Especifique a porta real do proxy na configuração quando não for o padrão do URL HTTP. A lista de proxies HTTP oferece candidatos a endpoint para um pedido HTTP público permitido sem conta de proxy. O HostnameEndpoint também evita incorporar o nome do host noutra cadeia de configuração delimitada por dois pontos.

Isto converte apenas a entrada de encaminhamento. As credenciais incorporadas num URL não se tornam um cabeçalho de autorização só porque o host e a porta foram divididos. Forneça qualquer autenticação de proxy suportada necessária através do mecanismo de autenticação do pedido. Para um destino HTTP simples e um intermediário que ofereça Basic, os cabeçalhos de pedido Basic do ProxyAgent fornecem um desses mecanismos.

Um URL de proxy HTTPS requer uma ligação ao proxy compatível com TLS. Um URL SOCKS requer negociação SOCKS. Nenhum deles é implementado enviando esses esquemas para uma conversão simples de endpoint HTTP ProxyAgent.

Artigos relacionados