Si session.proxies désigne un point de connexion mais que le script utilise le proxy du shell, réaffecter le même dictionnaire ne résoudra pas le conflit. Requests peut fusionner les réglages de proxy de l’environnement en leur donnant priorité sur ceux de la Session. Choisissez si la Session doit continuer à découvrir les réglages dans l’environnement.

Conserver la découverte dans l’environnement, préciser les routes dans la requête

Transmettez des valeurs explicites à chaque appel, comme le recommande Requests pour éviter ce conflit entre Session et environnement :

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

Remplacez le point d’écoute local par le vôtre. Si vous comparez des points de connexion HTTP publics, choisissez-les dans la liste de proxys HTTP tout en gardant la politique de Session identique. Cela contrôle les entrées de la correspondance fournie ; faites aussi un choix délibéré pour les autres schémas ou hôtes utilisés par l’application. Un service, un IDE, un conteneur ou un exécuteur CI peut hériter d’un environnement différent de celui de votre terminal.

Donner à la Session la maîtrise de ses réglages

Si l’application ne doit pas découvrir de proxys dans son environnement, définissez cette politique avant la première requête :

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 agit aussi sur la configuration des certificats liée à l’environnement et sur l’authentification netrc automatique. Tenez compte de ces dépendances avant de le choisir. Pour un ensemble privé de certificats d’autorités approuvé, vous pouvez transmettre un chemin explicite :

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

Utilisez l’ensemble réellement approuvé et laissez la vérification active. Gardez une Session distincte par politique de routage plutôt que de modifier une Session pendant que d’autres tâches l’utilisent.

Si aucune solution n’explique la route de l’application, comparez une Session isolée avec l’application dans le même environnement d’exécution et vers une même destination inoffensive. Notez les variables de proxy présentes, la valeur de trust_env et si l’appel fournit proxies ; excluez les URL contenant des identifiants des journaux partagés. Une réussite isolée oriente l’inspection suivante vers la construction de la Session, les adaptateurs, les parcours de requêtes préparées ou les transports personnalisés. Un test d’environnement avec curl ne permet pas de trancher le comportement de fusion propre à Requests.

Articles similaires