Використання змінних середовища 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 проксі
- що таке проксі для парсингу
Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.