Si session.proxies apunta a un destino pero el script usa el proxy del shell, volver a asignar el mismo diccionario no resolverá el conflicto. Requests puede combinar los ajustes de proxy del entorno por encima de los valores predeterminados de Session. Decide si Session debe seguir descubriendo la configuración del entorno.

Conserva el descubrimiento del entorno y proporciona rutas en la petición

Pasa valores explícitos a cada llamada, como recomienda Requests para evitar este conflicto entre Session y entorno:

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()

Sustituye el punto de escucha local por el tuyo. Si comparas puntos de conexión HTTP públicos, toma candidatos de la lista de proxies HTTP manteniendo fija la política de Session. Esto controla las entradas del mapa proporcionado; elige deliberadamente qué hacer con otros esquemas o hosts que use la aplicación. Un servicio, IDE, contenedor o ejecutor CI puede heredar un entorno distinto al de tu terminal.

Haz que Session controle su configuración

Si la aplicación no debe descubrir proxies desde su entorno, establece la política antes de la primera petición:

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 también afecta a la configuración de certificados relacionada con el entorno y a la autenticación automática netrc. Considera esas dependencias antes de elegirlo. Para un conjunto privado de certificados de CA aprobado, puedes pasar una ruta explícita:

response = session.get(
    "https://example.com/",
    timeout=(5, 15),
    verify="/path/to/approved-ca-bundle.pem",
)

Usa el conjunto realmente aprobado y mantén la verificación activada. Conserva una Session independiente para cada política de enrutamiento en lugar de modificar una mientras otros trabajos la usan.

Si ninguna alternativa explica la ruta de la aplicación, compara una Session aislada con la aplicación usando el mismo entorno de ejecución y un destino inofensivo. Anota qué variables de proxy existen, el valor de trust_env y si la llamada pasa proxies; excluye de los registros compartidos las URL con credenciales. El éxito aislado orienta la siguiente inspección hacia la creación de Session, adaptadores, flujos de peticiones preparadas o transportes personalizados. Una prueba del entorno con curl no resuelve el comportamiento de combinación propio de Requests.

Artículos relacionados