Proxies de Session no Python Requests e prioridade do ambiente
Torne previsível o roteamento do Python Requests quando session.proxies, variáveis de ambiente, ajustes por requisição e trust_env interagem.
Se session.proxies aponta para um endpoint, mas o script usa o proxy do shell, reatribuir o mesmo dicionário não resolverá o conflito. Requests pode mesclar configurações de proxy do ambiente com prioridade sobre os padrões da Session. Escolha se a Session deve continuar descobrindo configurações no ambiente.
Mantenha a descoberta do ambiente e forneça rotas na requisição
Passe valores explícitos para cada chamada, como Requests recomenda para evitar esse conflito entre Session e ambiente:
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
with requests.Session() as session:
response = session.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
Substitua o listener local pelo seu. Se comparar endpoints HTTP públicos, escolha candidatos na lista de proxies HTTP mantendo fixa a política da Session. Isso controla as entradas do mapeamento fornecido; faça uma escolha deliberada para outros esquemas ou hosts usados pela aplicação. Um serviço, IDE, contêiner ou executor de CI pode herdar um ambiente diferente do terminal.
Faça a Session controlar suas configurações
Se a aplicação não deve descobrir proxies no ambiente, defina a política antes da primeira requisição:
with requests.Session() as session:
session.trust_env = False
session.proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = session.get(
"https://example.com/",
timeout=(5, 15),
)
response.raise_for_status()
trust_env=False também afeta a configuração de certificados relacionada ao ambiente e a autenticação automática netrc. Considere essas dependências antes de escolhê-lo. Para um pacote privado de certificados de CA aprovado, você pode passar um caminho explícito:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Use o pacote realmente aprovado e mantenha a verificação ativada. Mantenha uma Session separada para cada política de roteamento, em vez de alterar uma enquanto outros trabalhos a utilizam.
Se nenhuma alternativa explica a rota da aplicação, compare uma Session isolada com a aplicação usando o mesmo ambiente de execução e um destino inofensivo. Registre quais variáveis de proxy existem, o valor de trust_env e se a chamada passa proxies; exclua dos logs compartilhados URLs com credenciais. O sucesso isolado direciona a próxima inspeção para a criação da Session, adaptadores, fluxos de requisições preparadas ou transportes personalizados. Um teste do ambiente com curl não resolve o comportamento de mesclagem próprio do Requests.