Konfiguracja proxy · 2 min czytania

Używanie zmiennych środowiskowych HTTP_PROXY / HTTPS_PROXY

Zmienne środowiskowe HTTP_PROXY, HTTPS_PROXY i NO_PROXY to najszybszy sposób na przesłanie wychodzącego ruchu programu przez proxy. Oto jak działają w curl, wget, Pythonie, Node.js i Dockerze — i gdzie cicho nie działają.

Jak działają zmienne środowiskowe proxy

HTTP_PROXY, HTTPS_PROXY i NO_PROXY to stara, wieloplatformowa konwencja: wiele narzędzi wiersza poleceń i bibliotek HTTP odczytuje je przy uruchamianiu i kieruje wychodzące żądania przez dowolny proxy, który nazwiesz. Efekt jest prosty — twój prawdziwy / oryginalny adres IP pozostaje ukryty, a docelowy serwer widzi adres wyjściowy proxy zamiast tego.

The naming trips people up. HTTP_PROXY is the proxy used for http:// destination URLs and HTTPS_PROXY for https:// destination URLs — it does not mean "a proxy reached over HTTPS". The scheme inside the value (http:// or socks5h://) is what decides how your client reaches our proxy.

Nie każde narzędzie respektuje te zmienne, a te, które to robią, różnią się szczegółami:

NarzędzieCzy odczytuje zmienne środowiskowe?Uwagi
curlTakmałe litery http_proxy tylko dla HTTP; obie wersje dla HTTPS
wgetTakrespektuje http_proxy, https_proxy, no_proxy
Python requests / urllibTakautomatycznie; argument per-request proxies= nadpisuje
Node.js core fetch / httpNiewymaga undici ProxyAgent lub global-agent
Docker CLI / buildCzęściowyprzekazuj przez --build-arg, -e lub config.json

Nasze to proxy datacenter (nie mieszkalne), więc strony konsumenckie mogą je łatwiej oznaczać — świetne do API, CI i celów skrobania, które kontrolujesz, mniej do zamkniętych platform konsumenckich. Nasze uwierzytelnione proxy SOCKS5 i HTTP wymagają nazwy użytkownika i hasła, więc nic nie wychodzi bez twoich poświadczeń. Do ciągłego, pełnego routingu urządzeń użyj zamiast tego VPN WireGuard; aby wypróbować jednorazową listę publicznych proxy lub dostęp z metrowanym cennikiem, zobacz cennik. Więcej przepisów znajduje się w przewodnikach, a pełne porównanie VPN i proxy jest również tutaj.

Ustaw zmienne w swoim shellu (curl + wget)

Eksportuj raz, a następnie zwykłe polecenia wychodzą przez proxy. Uwierzytelnienie idzie w linii w URL jako USER:PASS. Ustaw również wersję małymi literami — curl odczytuje tylko małe litery http_proxy dla schematu HTTP.

bash
# HTTP proxy endpoint (port 3128) with inline auth
export HTTP_PROXY="http://USER:PASS@proxy.s4m.online:3128"
export HTTPS_PROXY="http://USER:PASS@proxy.s4m.online: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:PASS@proxy.s4m.online: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:PASS@proxy.s4m.online:1080"
curl https://api.ipify.org

Python i Node.js

Biblioteki requests/urllib Pythona automatycznie pobierają zmienne. Podstawowy http Node'a i globalny fetch() nie — musisz samodzielnie dołączyć agenta proxy.

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:PASS@proxy.s4m.online:3128",
    "https": "http://USER:PASS@proxy.s4m.online:3128",
}
requests.get("https://api.ipify.org", proxies=proxies)

# SOCKS5 needs the extra:  pip install "requests[socks]"
proxies = {"https": "socks5h://USER:PASS@proxy.s4m.online:1080"}


# --- Node.js (>=18): core fetch does NOT read HTTP_PROXY on its own ---
// import { ProxyAgent, setGlobalDispatcher } from "undici";
// setGlobalDispatcher(
//   new ProxyAgent("http://USER:PASS@proxy.s4m.online: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 (budowanie i czas działania)

Kontenery nie dziedziczą twojego środowiska powłoki. Przekaż zmienne jawnie dla budów i uruchomień; demon, który pobiera obrazy, odczytuje je z własnego pliku konfiguracyjnego.

bash
# Build-time: forward the proxy into the build
docker build \
  --build-arg HTTP_PROXY="http://USER:PASS@proxy.s4m.online:3128" \
  --build-arg HTTPS_PROXY="http://USER:PASS@proxy.s4m.online:3128" \
  --build-arg NO_PROXY="localhost,127.0.0.1" .

# Runtime: inject into the running container
docker run --rm \
  -e HTTP_PROXY="http://USER:PASS@proxy.s4m.online:3128" \
  -e HTTPS_PROXY="http://USER:PASS@proxy.s4m.online: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:PASS@proxy.s4m.online:3128",
#       "httpsProxy": "http://USER:PASS@proxy.s4m.online:3128",
#       "noProxy":    "localhost,127.0.0.1" } } }

Warto wiedzieć o pułapkach

Koduj procentowo dane uwierzytelniające

Znaki specjalne w USER:PASS łamią URL. Zakoduj je: @ staje się %40, : staje się %3A, / staje się %2F, # staje się %23. W przeciwnym razie parser tnie wartość w złym miejscu.

HTTPS_PROXY celuje w adresy https://

Wybiera proxy dla adresów URL docelowych https — nie proxy osiągnięte przez HTTPS. Schemat w wartości (http:// lub socks5h://) określa, jak łączysz się z naszym proxy.

NO_PROXY jest wybredny

Oddzielone przecinkami, bez spacji, dopasowane do sufiksu (.example.com). Zakresy CIDR i znak * są obsługiwane przez niektóre narzędzia i ignorowane przez inne, więc testuj zamiast zakładać.

socks5h vs socks5

Z socks5:// twoja maszyna rozwiązuje DNS lokalnie, a tylko połączenie TCP jest przesyłane przez proxy. Użyj socks5h://, aby wyszukiwanie nazwy hosta również odbywało się na proxy, utrzymując DNS z dala od twojego źródła.

Dane uwierzytelniające są widoczne lokalnie

Zmienne środowiskowe pojawiają się w wynikach ps, historii powłoki i logach CI. Użyj poświadczeń proxy na konto, które możesz rotować, i preferuj przechowywanie sekretów zamiast umieszczania ich w Dockerfile lub pipeline.

Nie każdy klient się do nich stosuje

Podstawowe http i fetch węzła, plus niektóre SDK, całkowicie ignorują te zmienne. Zawsze potwierdzaj za pomocą echa IP, takiego jak api.ipify.org, że ruch faktycznie opuścił przez wyjście proxy, a nie Twoje prawdziwe IP.

Share this page
FAQ

Pytania, odpowiedzi

Dlaczego curl ignoruje HTTP_PROXY, ale respektuje http_proxy?

Dla schematu HTTP, curl celowo odczytuje tylko małe litery http_proxy. Duże litery HTTP_PROXY zostały wyłączone lata temu, ponieważ skrypty CGI otrzymują zmienną środowiskową HTTP_* z nagłówków klienta, co mogłoby przejąć ustawienie proxy. Dla HTTPS i NO_PROXY curl odczytuje obie formy. Bezpiecznym nawykiem jest eksportowanie zarówno dużych, jak i małych liter.

Jaka jest różnica między HTTPS_PROXY a 'proxy przez HTTPS'?

HTTPS_PROXY wybiera, który proxy obsługuje żądania do adresów URL https://. Nie mówi nic o tym, jak łączysz się z samym proxy — to jest ustawione przez schemat w wartości. http://proxy.s4m.online:3128 osiąga nasz proxy HTTP w czystym połączeniu CONNECT; socks5h://proxy.s4m.online:1080 osiąga punkt końcowy SOCKS5. Twój rzeczywisty ładunek do witryny https pozostaje zaszyfrowany TLS od początku do końca.

Czy mogę umieścić adres URL SOCKS5 w HTTP_PROXY?

curl akceptuje socks5:// i socks5h:// w adresie proxy, ale wiele innych narzędzi tego nie robi. Dla przenośności użyj ALL_PROXY dla SOCKS5 lub własnej opcji SOCKS biblioteki. Preferuj socks5h://, aby DNS rozwiązywał na proxy.s4m.online:1080 zamiast wycieku zapytań z twojego źródła.

Czy to są proxysy mieszkalne?

Nie. proxy s4m to uwierzytelnione proxy SOCKS5 i HTTP z centrum danych, rozliczane na zasadzie pay-as-you-go. IP z centrum danych są szybkie i niezawodne dla API, CI i celów skrobania, które kontrolujesz, ale niektóre strony konsumenckie łatwiej wykrywają i blokują zakresy z centrum danych niż te z mieszkań. Nie sprzedajemy ani nie twierdzimy, że mamy IP z mieszkań.

Czy ustawienie tych zmiennych ukryje mój prawdziwy adres IP wszędzie?

Tylko dla programów, które rzeczywiście je odczytują. Rdzeń http Node'a, global fetch, niektóre SDK i każda aplikacja, która otwiera surowe gniazda, ominie proxy i ujawni Twój prawdziwy adres IP. Po skonfigurowaniu, zweryfikuj za pomocą echa IP, takiego jak api.ipify.org, lub użyj naszej sieci VPN WireGuard, gdy potrzebujesz, aby każdy proces na urządzeniu był kierowany.

Kieruj swoje żądania przez s4m

Uwierzytelnione proxy SOCKS5 i HTTP z centrum danych, płatność za zużycie, plus płaska stawka VPN WireGuard. Brak logów z założenia, RAM-first, anonimowe konta. Dodaj dedykowane osobiste IP, gdy potrzebujesz statycznego wyjścia.

Ludzie znaleźli tę stronę, szukając

Rzeczywiste frazy wyszukiwania, na które ta strona odpowiada — powiązane otwierają stronę, która je szczegółowo omawia.