Зашто os.system("unset http_proxy") ништа не мења
Уклоните прокси променљиву из исправног Python процеса или обезбедите контролисано окружење подређеној команди.
Следећи позиви стварају два одвојена shell процеса:
os.system('unset http_proxy')
os.system('curl https://example.com/')
Први shell уклања променљиву из сопственог окружења и завршава се. Python процес и даље има оригиналну вредност. Други shell је поново наслеђује.
Дајте подређеном процесу окружење које сте намеравали
Када само једна команда треба да се изврши без наслеђених прокси променљивих, копирајте окружење Python-а и проследите копију подређеном процесу:
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)
Експлицитно празно curl подешавање проксија такође поништава избор проксија из сопствене curl конфигурације. Копија окружења чува друге вредности које команда може да захтева. Прослеђивање празног окружења уместо тога може да уклони путање за проналажење извршних датотека и неповезану конфигурацију апликације.
За наредне операције у самом Python процесу, намерно промените os.environ. То утиче на то шта новостворена деца наслеђују; не преписује окружење родитељског терминала и не реконфигурише нужно HTTP клијенте који су већ ухватили своја подешавања.
subprocess API документује аргумент env, а os.environ описује процесно окружење Python-а. Управо су ти опсези разлог зашто shell команда може да пријави успех док следећи захтев још користи стари прокси.
На крају, проверите клијента који заиста покрећете. Променљиве окружења су само један улаз конфигурације. експлицитна опција проксија или сопствена конфигурација апликације могу наставити да бирају прокси након што тих променљивих више нема.