Passe um mapeamento vazio para ProxyHandler quando apenas um opener do urllib precisar se conectar diretamente:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

O dicionário vazio não fornece rotas de proxy. Omitir o mapeamento permite que o handler descubra proxies no ambiente e nas configurações da plataforma. Essas duas construções expressam políticas diferentes.

O exemplo usa a biblioteca padrão do Python e mantém a verificação HTTPS normal. O bloco with fecha a resposta, inclusive quando uma exceção faz a execução sair do bloco.

Requisições diretas e por proxy na mesma aplicação

Dois openers podem representar as duas políticas sem mudar variáveis de ambiente entre as chamadas:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Substitua o endereço de loopback pelo seu proxy HTTP ou escolha um candidato na lista de proxies HTTP para a comparação por proxy. Ele pode transportar a conexão ao destino HTTPS por CONNECT quando o serviço permitir. O protocolo e a autenticação aceitos pelo listener devem ser compatíveis com o handler.

Mantenha o opener padrão intacto

Chame direct.open ou proxied.open pelo objeto responsável pela rota. install_opener altera o padrão de todo o processo usado pelas funções de conveniência do urllib; assim, uma biblioteca que o use pode afetar código sem relação com ela. Ele é desnecessário para o opener isolado acima.

O argumento timeout é uma configuração de operação, não um prazo de tempo real que cobre cada transferência inteira. Leia apenas os dados necessários e use um prazo em nível superior se a tarefa tiver um orçamento total rigoroso.

Esses objetos opener não alteram o cliente de outra biblioteca, um processo existente nem as configurações de proxy de um navegador.

Artigos relacionados