Причина у этого странного поведения историческая, и сидит она в том, как заголовки запроса попадают в окружение обработчика.
Когда веб-сервер запускает обработчик страницы, он кладёт все заголовки в переменные: X-Forwarded-For становится HTTP_X_FORWARDED_FOR, User-Agent становится HTTP_USER_AGENT. Схема простая: приставка HTTP_ плюс имя заголовка заглавными.
Дальше очевидное. Кто угодно снаружи шлёт заголовок Proxy: чей-то адрес, и обработчик видит у себя HTTP_PROXY со значением, которое пришло от постороннего человека. Библиотека внутри читает эту переменную и покорно уводит все исходящие запросы через чужую машину.
Поэтому curl и часть библиотек перестали доверять заглавному HTTP_PROXY. Строчный http_proxy снаружи так не подделаешь, его выставляет только тот, кто запускает процесс.
Правила, которые работают везде:
http_proxy пишем строчными;HTTPS_PROXY и https_proxy читаются оба, но держите единообразие и пишите строчными;NO_PROXY и no_proxy тоже оба, регистр там ни на что не влияет;- в Windows регистр имён вообще не различается, поэтому вылезает всё это только на линуксовых машинах.