Python urllib: desative proxies para um único opener
Crie um opener urllib com conexão direta usando ProxyHandler({}), mantendo os outros clientes e o ambiente do processo sem alterações.
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.