Szybka odpowiedź
Jak używać Python Requests ze statycznym proxy?
Aby używać Python Requests ze statycznym proxy, zbuduj URL proxy z hosta, portu, nazwy użytkownika i hasła swojego IP. Przekaż go dla obu kluczy http i https w proxies=, ustaw timeout i sprawdź wyjściowe IP na api.ipify.org. SteadyProxy statyczne IP kosztują 2,24 USD za 30 dni według stanu na październik 2026, bez KYC i z płatnością krypto.
Jakie są najważniejsze informacje?
| Instalacja | python -m pip install requests (SOCKS5: requests[socks]) |
|---|---|
| URL proxy HTTP | http://USERNAME:PASSWORD@host:port, for both the http and https keys |
| URL proxy SOCKS5 | socks5h://USERNAME:PASSWORD@host:port (domyślny port SOCKS5 7778) |
| Znaki specjalne | Zakoduj nazwę użytkownika i hasło przez URL za pomocą urllib.parse.quote |
| Proxy ze zmiennych środowiskowych | session.trust_env = False ignoruje HTTP_PROXY ustawione gdzie indziej |
| Timeouty | (10, 30): 10 s na połączenie, 30 s na odczyt, w naszych przykładach |
| Testowano | Python 3.14 i Requests 2.34, 19 października 2026, przez testowe proxy chronione hasłem |
Jak wysłać żądanie przez jedno statyczne proxy?
Każde statyczne IP ma własny host, port, nazwę użytkownika i hasło w Twoim panelu. Umieść je w zmiennych środowiskowych, a nie w kodzie. Poniższy skrypt buduje URL proxy, wysyła jedno żądanie do api.ipify.org i zatrzymuje się, jeśli wyjściowe IP nie jest tym, którego oczekujesz. Następnie odczytuje nazwę sieci z ipinfo.io. Przy błędnym haśle Requests zgłasza ProxyError z komunikatem 407 Proxy Authentication Required, jak pokazał nasz test.
"""Python Requests through one static proxy, with a check of the exit IP.
Install: python -m pip install requests
"""
import os
from urllib.parse import quote
import requests
HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
PORT = os.environ.get("PROXY_PORT", "7777")
USER = quote(os.environ.get("PROXY_USER", "USERNAME"), safe="")
PASSWORD = quote(os.environ.get("PROXY_PASS", "PASSWORD"), safe="")
EXPECTED_IP = os.environ.get("EXPECTED_IP") # the static IP listed in your dashboard
# The proxy URL starts with http:// even for https:// sites (Requests opens a CONNECT tunnel)
PROXY = "http://" + USER + ":" + PASSWORD + "@" + HOST + ":" + PORT
PROXIES = {"http": PROXY, "https": PROXY}
with requests.Session() as session:
session.trust_env = False # ignore HTTP_PROXY / HTTPS_PROXY set elsewhere on the machine
response = session.get("https://api.ipify.org?format=json", proxies=PROXIES, timeout=(10, 30))
response.raise_for_status()
exit_ip = response.json()["ip"]
print("Exit IP:", exit_ip)
if EXPECTED_IP and exit_ip != EXPECTED_IP:
raise SystemExit("Exit IP differs from the static IP you expected")
page = session.get("https://ipinfo.io/json", proxies=PROXIES, timeout=(10, 30))
page.raise_for_status()
print("Network:", page.json().get("org"), "-", page.json().get("country"))
Dlaczego URL proxy to http:// dla stron https://?
Kluczem słownika proxies jest schemat docelowej strony; wartością jest adres proxy. Dla strony https:// Requests prosi proxy HTTP o otwarcie tunelu CONNECT, a następnie prowadzi przez niego TLS do strony. Proxy nigdy nie widzi odszyfrowanej strony. Dlatego oba klucze wskazują ten sam URL proxy http://. Pozostaw włączoną weryfikację certyfikatów: nigdy nie ustawiaj verify=False, żeby pozbyć się błędu proxy.
Jak przypisać każdemu kontu własne statyczne IP?
Przypisz każde konto lub zadanie do jednego IP i zbuduj jedną Session na każde przypisanie. Session przechowuje cookies i ponownie używa połączeń, a przy trust_env = False jej ustawienie proxies nie jest zastępowane przez zmienne środowiskowe. Poniższy przykład odczytuje jedną linię na IP, w kolejności host, port, nazwa użytkownika, hasło, które możesz skopiować z czterech wartości w swoim panelu.
"""One static IP per account or per job with Python Requests.
Each line holds the four values shown for one IP in your dashboard:
host:port:username:password
"""
import os
from urllib.parse import quote
import requests
STATIC_IPS = {
"store-uk": os.environ.get("PROXY_STORE_UK", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
"store-de": os.environ.get("PROXY_STORE_DE", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
}
def session_for(name):
host, port, user, password = STATIC_IPS[name].split(":", 3)
proxy = "http://" + quote(user, safe="") + ":" + quote(password, safe="") + "@" + host + ":" + port
session = requests.Session()
session.trust_env = False
session.proxies = {"http": proxy, "https": proxy}
return session
for account in STATIC_IPS:
with session_for(account) as s:
ip = s.get("https://api.ipify.org", timeout=(10, 30)).text
print(account, "->", ip)
Jak używać SOCKS5 zamiast HTTP?
Zainstaluj requests[socks] i zamień http:// na socks5h://, a port HTTP na port SOCKS5. Litera h sprawia, że proxy rozwiązuje nazwy hostów, więc odpowiedzi DNS pasują do kraju IP. Reszta kodu pozostaje taka sama. Kompletny, przetestowany przykład znajdziesz w przewodniku po statycznym proxy SOCKS5. Oba porty jednego statycznego IP prowadzą do tego samego wyjściowego IP.
Co oznaczają typowe błędy?
Każdy błąd wskazuje na jedną warstwę.
- ProxyError z 407: błędna nazwa użytkownika lub hasło albo ta maszyna nie jest na Twojej liście dozwolonych.
- ConnectTimeout: błędny host lub port albo zapora po Twojej stronie blokuje ruch wychodzący do portu proxy.
- ReadTimeout: cel lub ścieżka jest wolna; spróbuj ponownie później i zachowaj timeout odczytu.
- SSLError: problem z certyfikatem po stronie celu lub Twojej maszyny; nie wyłączaj weryfikacji.
- 403 lub 429 od celu: strona odrzuciła żądanie lub ograniczyła jego częstotliwość; zwolnij tempo.
Jeśli jedno IP zawodzi przy każdym żądaniu przez godzinę, skontaktuj się z pomocą techniczną. Nasza zasada wymiany: Jeśli IP nie działa, napisz do pomocy technicznej: naprawimy je lub wymienimy na inne IP w tym samym kraju, jeśli pozwolą na to zapasy.
O co jeszcze ludzie pytają w kontekście Pythona i statycznych proxy?
Dlaczego ustawiam oba klucze, http i https?
Requests wybiera proxy według schematu docelowego URL. Bez klucza https żądania do stron https:// wychodziłyby bezpośrednio, z Twojego własnego IP. Ustawienie obu kluczy na ten sam URL proxy kieruje każde żądanie przez statyczne IP. Kontrola na api.ipify.org w skrypcie od razu wychwytuje brakujący klucz.
Dlaczego kodować nazwę użytkownika i hasło przez URL?
Znaki takie jak @, : i / mają znaczenie wewnątrz URL. Hasło z @ zostałoby inaczej odczytane jako koniec części logowania. urllib.parse.quote z safe='' koduje je, a Requests dekoduje je przed wysłaniem logowania do proxy. Działa to zarówno dla URL HTTP, jak i socks5h://.
Po co ustawiać trust_env na False?
Requests domyślnie odczytuje HTTP_PROXY, HTTPS_PROXY i NO_PROXY ze środowiska, a dokumentacja ostrzega, że proxy ze środowiska mogą nadpisać ustawienie proxies w Session. VPN lub ustawienie firmowe mogłoby wtedy kierować część żądań gdzie indziej. trust_env = False sprawia, że kod używa tylko przekazanego proxy.
Czy mogę użyć tego samego kodu z httpx lub aiohttp?
Tak, idea jest ta sama: URL proxy zbudowany z hosta, portu, nazwy użytkownika i hasła, plus timeout i kontrola wyjściowego IP. Nazwy parametrów różnią się w zależności od biblioteki i wersji, więc kieruj się dokumentacją proxy danej biblioteki. Zachowaj jednego klienta na statyczne IP, tak jak w przypadku Sessions w Requests.
Jak trzymać dane uwierzytelniające poza repozytorium?
Odczytuj je ze zmiennych środowiskowych lub menedżera sekretów, jak w przykładach, i nigdy nie commituj pliku .env z prawdziwymi wartościami. Nie wypisuj URL proxy w logach, bo zawiera hasło. Przy metodzie listy dozwolonych IP skrypty na dozwolonych maszynach nie potrzebują w ogóle hasła proxy.
Ile żądań obsłuży jedno statyczne IP w Pythonie?
Proxy rozlicza za IP i za 30 dni, a nie za GB. Rozliczane za IP i za 30 dni, nie za GB; obowiązuje zasada uczciwego korzystania. Prawdziwym ograniczeniem jest docelowa strona, która może ograniczać częstotliwość dla jednego IP. Utrzymuj umiarkowaną współbieżność na IP, dodawaj opóźnienia i przestrzegaj warunków każdej strony. Przy większym wolumenie jednego zadania rozłóż pracę na kilka IP; zobacz ile statycznych IP potrzebuję?.
Z jakich źródeł korzysta ten przewodnik? (3)
- Zaawansowane użycie Requests: proxy, SOCKS, timeouty — Requests (2026-10-19)
- urllib.parse: quote — Python Software Foundation (2026-10-19)
- API ipify — ipify (2026-10-19)