Для 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; собственная среда выполнения приложения может иначе обнаруживать и объединять настройки прокси.

Похожие статьи