Pourquoi os.system("unset http_proxy") ne change rien
Supprimez une variable de proxy du bon processus Python ou fournissez un environnement contrôlé à une commande enfant.
Les appels suivants créent deux processus shell distincts :
os.system('unset http_proxy')
os.system('curl https://example.com/')
Le premier shell retire une variable de son propre environnement puis se termine. Le processus Python possède toujours la valeur d'origine. Le second shell l'hérite de nouveau.
Donnez à l'enfant l'environnement que vous vouliez
Lorsqu'une seule commande doit s'exécuter sans variables de proxy héritées, copiez l'environnement de Python et transmettez la copie à l'enfant :
import os
import subprocess
env = os.environ.copy()
for name in ('http_proxy', 'https_proxy', 'all_proxy',
'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY'):
env.pop(name, None)
subprocess.run(['curl', '--proxy', '', 'https://example.com/'],
env=env, check=True)
Le réglage explicite de proxy vide de curl remplace aussi le choix de proxy issu de la configuration propre à curl. La copie de l'environnement préserve d'autres valeurs dont la commande peut avoir besoin. Transmettre plutôt un environnement vide peut supprimer des chemins de recherche d'exécutables et une configuration d'application sans rapport.
Pour les opérations suivantes dans le processus Python lui-même, modifiez os.environ délibérément. Cela affecte ce que les enfants nouvellement créés héritent ; cela ne réécrit pas l'environnement du terminal parent ni ne reconfigure nécessairement les clients HTTP qui ont déjà capturé leurs réglages.
L'API subprocess documente l'argument env, et os.environ décrit l'environnement de processus de Python. Ces portées sont la raison pour laquelle une commande shell peut signaler un succès alors que la requête suivante utilise encore l'ancien proxy.
Enfin, vérifiez le client que vous exécutez réellement. Les variables d'environnement sont une entrée de configuration. Une option de proxy explicite ou la configuration propre d'une application peut continuer à choisir un proxy après la disparition de ces variables.