Использование переменных окружения HTTP_PROXY / HTTPS_PROXY
Переменные окружения HTTP_PROXY, HTTPS_PROXY и NO_PROXY — это самый быстрый способ направить исходящий трафик программы через прокси. Вот как они ведут себя в curl, wget, Python, Node.js и Docker — и где они незаметно не срабатывают.
Как работают переменные окружения прокси
HTTP_PROXY, HTTPS_PROXY и NO_PROXY — это старая кроссплатформенная конвенция: многие инструменты командной строки и HTTP-библиотеки читают их при запуске и направляют исходящие запросы через указанный вами прокси. Эффект прост — ваш реальный / исходный IP остаётся скрытым, а получатель видит вместо него выходной адрес прокси.
Названия сбивают с толку. HTTP_PROXY — это прокси для URL-адресов назначения http://, а HTTPS_PROXY — для URL-адресов назначения https://; это не означает «прокси, доступный по HTTPS». Схема внутри значения (http:// или socks5h://) определяет, как ваш клиент соединяется с нашим прокси.
Не каждый инструмент учитывает эти переменные, а те, что учитывают, расходятся в деталях:
| Инструмент | Читает переменные окружения? | Примечания |
|---|---|---|
| curl | Да | строчными буквами http_proxy только для HTTP; оба регистра для HTTPS |
| wget | Да | учитывает http_proxy, https_proxy, no_proxy |
| Python requests / urllib | Да | автоматически; аргумент proxies= для отдельного запроса имеет приоритет |
Node.js core fetch / http | Нет | нужен undici ProxyAgent или global-agent |
| Docker CLI / build | Частично | передавайте через --build-arg, -e или config.json |
Наши прокси — из дата-центров (не резидентные), поэтому потребительские сайты могут чаще их помечать — отлично подходят для API, CI и целей скрапинга, которые вы контролируете, и хуже для закрытых потребительских платформ. Наши аутентифицированные SOCKS5 и HTTP прокси требуют имени пользователя и пароля, так что ничего не выходит без ваших учётных данных. Для постоянной маршрутизации всего устройства используйте вместо этого WireGuard VPN; чтобы попробовать одноразовый публичный список прокси или узнать цену доступа по счётчику, смотрите цены. Больше рецептов — в руководствах, а полное сравнение VPN и прокси тоже здесь.
Задайте переменные в вашей оболочке (curl + wget)
Экспортируйте один раз, и обычные команды будут выходить через прокси. Аутентификация указывается прямо в URL в формате USER:PASS. Задайте также вариант строчными буквами — curl читает http_proxy только строчными буквами для схемы HTTP.
# HTTP proxy endpoint (port 3128) with inline auth export HTTP_PROXY="http://USER:[email protected]:3128" export HTTPS_PROXY="http://USER:[email protected]:3128" # curl and some tools only read the lowercase form — set both export http_proxy="$HTTP_PROXY" export https_proxy="$HTTPS_PROXY" # Never send local / internal traffic through the proxy export NO_PROXY="localhost,127.0.0.1,::1,.internal,169.254.169.254" export no_proxy="$NO_PROXY" # Now normal commands go through the proxy curl https://api.ipify.org # prints the proxy exit IP, not yours wget -qO- https://api.ipify.org # One-off, without exporting anything: curl -x http://USER:[email protected]:3128 https://example.com # SOCKS5 (port 1080). socks5h makes DNS resolve AT the proxy, # so your origin never leaks the hostname lookup. export ALL_PROXY="socks5h://USER:[email protected]:1080" curl https://api.ipify.org
Python и Node.js
requests/urllib в Python подхватывают эти переменные автоматически. Встроенный http в Node и глобальный fetch() — нет; вам придётся самостоятельно подключить прокси-агент.
# --- Python: requests, urllib, pip and httpx honor the env vars ---
import requests
print(requests.get("https://api.ipify.org").text) # proxy exit IP
# Override per-request (this ignores the env vars):
proxies = {
"http": "http://USER:[email protected]:3128",
"https": "http://USER:[email protected]:3128",
}
requests.get("https://api.ipify.org", proxies=proxies)
# SOCKS5 needs the extra: pip install "requests[socks]"
proxies = {"https": "socks5h://USER:[email protected]:1080"}
# --- Node.js (>=18): core fetch does NOT read HTTP_PROXY on its own ---
// import { ProxyAgent, setGlobalDispatcher } from "undici";
// setGlobalDispatcher(
// new ProxyAgent("http://USER:[email protected]:3128"));
// const r = await fetch("https://api.ipify.org");
// console.log(await r.text()); // proxy exit IP
//
// To make libraries respect the env vars instead:
// npm i global-agent
// GLOBAL_AGENT_HTTP_PROXY=$HTTP_PROXY node -r global-agent/bootstrap app.jsDocker (сборка и выполнение)
Контейнеры не наследуют окружение вашей оболочки. Передавайте переменные явно для сборок и запусков; демон, который скачивает образы, читает их из своего собственного конфигурационного файла.
# Build-time: forward the proxy into the build docker build \ --build-arg HTTP_PROXY="http://USER:[email protected]:3128" \ --build-arg HTTPS_PROXY="http://USER:[email protected]:3128" \ --build-arg NO_PROXY="localhost,127.0.0.1" . # Runtime: inject into the running container docker run --rm \ -e HTTP_PROXY="http://USER:[email protected]:3128" \ -e HTTPS_PROXY="http://USER:[email protected]:3128" \ -e NO_PROXY="localhost,127.0.0.1" \ curlimages/curl https://api.ipify.org # The Docker daemon itself (image pulls) reads ~/.docker/config.json: # { "proxies": { "default": { # "httpProxy": "http://USER:[email protected]:3128", # "httpsProxy": "http://USER:[email protected]:3128", # "noProxy": "localhost,127.0.0.1" } } }
Подводные камни, о которых стоит знать
Кодируйте учётные данные в percent-encoding
Специальные символы в USER:PASS ломают URL. Кодируйте их: @ становится %40, : становится %3A, / становится %2F, # становится %23. Иначе парсер обрежет значение не в том месте.
HTTPS_PROXY нацелен на URL-адреса https://
Она выбирает прокси для URL-адресов назначения https, а не прокси, доступный по HTTPS. Схема в значении (http:// или socks5h://) определяет, как вы соединяетесь с нашим прокси.
NO_PROXY привередлив
Разделяется запятыми, без пробелов, сопоставляется по суффиксу (.example.com). Диапазоны CIDR и символ подстановки * поддерживаются одними инструментами и игнорируются другими, поэтому проверяйте, а не предполагайте.
socks5h против socks5
С socks5:// ваша машина разрешает DNS локально, и через прокси проходит только TCP-соединение. Используйте socks5h://, чтобы поиск имени хоста тоже происходил на прокси, не задействуя DNS вашего источника.
Учётные данные видны локально
Переменные окружения появляются в выводе ps, истории оболочки и логах CI. Используйте отдельные прокси-учётные данные для каждого аккаунта, которые можно ротировать, и предпочитайте хранилища секретов вместо того, чтобы вписывать их в Dockerfile или конвейер.
Не каждый клиент им подчиняется
Встроенные http и fetch в Node, а также некоторые SDK, полностью игнорируют эти переменные. Всегда проверяйте через IP-эхо вроде api.ipify.org, что трафик действительно вышел через выход прокси, а не через ваш реальный IP.
Ответы на вопросы
Почему curl игнорирует HTTP_PROXY, но учитывает http_proxy?
Для схемы HTTP curl намеренно читает только http_proxy строчными буквами. Вариант HTTP_PROXY заглавными буквами отключили много лет назад, потому что CGI-скрипты получают переменную окружения HTTP_* из заголовков клиента, что могло бы подменить настройку прокси. Для HTTPS и NO_PROXY curl читает оба регистра. Безопасная привычка — экспортировать варианты и заглавными, и строчными буквами.
В чём разница между HTTPS_PROXY и «прокси по HTTPS»?
HTTPS_PROXY определяет, какой прокси обрабатывает запросы к целевым URL-адресам https://. Он ничего не говорит о том, как вы подключаетесь к самому прокси — это задаётся схемой в значении. http://proxy.s4m.online:3128 обращается к нашему HTTP-прокси через открытый CONNECT; socks5h://proxy.s4m.online:1080 обращается к конечной точке SOCKS5. Ваша фактическая полезная нагрузка к https-сайту остаётся зашифрованной TLS от начала до конца в любом случае.
Можно ли указать SOCKS5-URL в HTTP_PROXY?
curl принимает socks5:// и socks5h:// в URL-адресе прокси, но многие другие инструменты — нет. Для переносимости используйте ALL_PROXY для SOCKS5 или собственную опцию SOCKS вашей библиотеки. Отдавайте предпочтение socks5h://, чтобы DNS разрешался на proxy.s4m.online:1080, а не утекал запросами с вашего источника.
Это резидентные прокси?
Нет. Прокси s4m — это аутентифицированные датацентровые SOCKS5- и HTTP-прокси с оплатой по факту использования. Датацентровые IP быстрые и надёжные для API, CI и целей скрапинга, которые вы контролируете, но некоторые потребительские сайты обнаруживают и блокируют датацентровые диапазоны легче, чем резидентные. Мы не продаём резидентные IP и не заявляем, что располагаем ими.
Скроет ли установка этих переменных мой настоящий IP везде?
Только для программ, которые их действительно читают. Встроенный http в Node, глобальный fetch, некоторые SDK и любое приложение, открывающее сырые сокеты, обойдут прокси и раскроют ваш настоящий IP. После настройки проверьте с помощью IP-эха, например api.ipify.org, или воспользуйтесь нашим WireGuard VPN, когда нужно направить каждый процесс на устройстве.
Направьте свои запросы через s4m
Аутентифицированные SOCKS5 и HTTP прокси дата-центров с тарификацией по факту использования, а также WireGuard VPN с фиксированной оплатой. No-logs по задумке, RAM-first, анонимные аккаунты. Добавьте выделенный персональный IP, когда вам нужен статический выход.
Эту страницу нашли по запросу
- использование переменных окружения HTTP_PROXY / HTTPS_PROXY
- openvpn настройки
- безопасен ли openvpn
- openvpn
- безопасен ли авторизация прокси
- рабочий список бесплатных прокси
- что такое прозрачный прокси
- VPN для удалённой работы
- как сконфигурировать vpn kill switch
- настройка прокси в Puppeteer с аутентификацией
- http прокси
- что такое прокси для парсинга
Реальные поисковые фразы, на которые отвечает эта страница — по ссылкам откроются материалы, раскрывающие тему глубже.