Налаштування проксі · 2 хв читання

Використання змінних середовища 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.

bash
# 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
# --- 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.js

Docker (збірка та виконання)

Контейнери не успадковують середовище вашої оболонки. Передавайте змінні явно для збірок і запусків; демон, що завантажує образи, читає їх зі свого власного конфігураційного файлу.

bash
# 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.

Поділитися сторінкою
FAQ

Відповіді на питання

Чому 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, коли вам потрібен статичний вихід.

Цю сторінку знаходять за запитами

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.