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.

Artigos relacionados