Чому curl ігнорує HTTP_PROXY
Навмисний виняток curl для HTTP_PROXY, змінні окремих протоколів, ALL_PROXY та передбачувана перевірка проксі через середовище.
Для HTTP-адрес задавайте змінну http_proxy малими літерами. curl навмисно ігнорує HTTP_PROXY великими літерами. У POSIX-оболонці:
http_proxy=http://127.0.0.1:8080 curl http://example.com/
https_proxy=http://127.0.0.1:8080 curl https://example.com/Ці присвоєння діють лише для команди безпосередньо після них. Замініть адресу прослуховування з прикладу своїм проксі; для порівняння публічних кінцевих точок виберіть кандидата зі списку HTTP-проксі. Змінна https_proxy обирає маршрут до HTTPS-адрес; значення з http:// і далі означає звичайний HTTP-проксі, здатний створити тунель до цілі. У PowerShell і командних оболонках Windows інший синтаксис присвоєння.
Чим небезпечний саме цей запис великими літерами
CGI-середовища можуть перетворювати заголовки вхідних запитів на змінні HTTP_ великими літерами. Тому заголовок з іменем Proxy може стати HTTP_PROXY. Довіра до нього як до конфігурації вихідних з’єднань дозволила б даним запиту обирати проксі. Вимога curl використовувати малі літери уникає такого зіставлення; виняток не діє однаково для HTTPS і змінних інших протоколів.
Якщо зміна змінної не змінює маршрут
Спочатку шукайте змінну конкретного протоколу, потім резервну ALL_PROXY. Відповідне правило NO_PROXY може обійти проксі. Варіанти малими літерами та конкуруючі визначення також важливі. Цей цикл для Unix-подібної оболонки повідомляє про наявність, не друкуючи значення, які можуть містити облікові дані:
for name in http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY no_proxy NO_PROXY; do
if printenv "$name" >/dev/null; then
printf '%s is set\n' "$name"
fi
doneПеревірте перелічені визначення локально. Якщо якесь з’являється знову, перевірте налаштування оболонки запуску, служби, IDE, контейнера або CI. Наявність указує на можливі вхідні налаштування, але не показує, яке значення отримало перевагу.
Щоб ізолювати один запит від цих варіантів вибору проксі, задайте і кінцеву точку, і порожній список обходу:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Для порівняння з прямим з’єднанням, якщо воно дозволене:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Ці команди допомагають відрізнити успадкований маршрут від збою зв’язку. Розберіть результати перевірки проксі за етапами, перш ніж змінювати інші налаштування середовища. Правила змінних curl застосовуйте до curl; власне середовище виконання програми може інакше виявляти й об’єднувати проксі.