Przewodnik po Pythonie · 1 min czytania

Jak używać proxy z Python requests

Biblioteka requests kieruje ruch przez proxy z jednym małym słownikiem — ale schemat, który wybierzesz, decyduje, czy twój DNS i IP źródłowe pozostaną ukryte. Oto praktyczna wersja, z pełnym działającym kodem.

Słownik proxy i dlaczego schemat ma znaczenie

Biblioteka requests Pythona komunikuje się z proxy za pomocą pojedynczego słownika. Klucze nie są protokołem proxy — są schematem URL-a docelowego. Tak więc {"http": ..., "https": ...} informuje requests, które proxy użyć, gdy docelowa strona to witryna HTTP lub HTTPS, a w praktyce oba klucze wskazują na ten sam punkt końcowy.

Co tak naprawdę zmienia twoją prywatność, to schemat w środku adresu proxy. Z socks5:// twoja własna maszyna najpierw rozwiązuje DNS, a następnie łączy się przez proxy, co może ujawniać nazwy hostów, które odwiedzasz. Z socks5h:// proxy rozwiązuje DNS za ciebie, więc docelowa nazwa hosta nigdy nie opuszcza twojej maszyny w czystej postaci. Dla uwierzytelnionego proxy s4m.online, preferuj socks5h, aby utrzymać DNS zdalnie i lepiej ukryć swój adres IP.

Schemat proxyDNS rozwiązany przezPortZainstaluj
socks5h://Proxy (zdalne)1080requests[socks]
socks5://Twoja maszyna (lokalna)1080requests[socks]
http://Proxy3128Standardowe requests

Wsparcie SOCKS wymaga PySocks (pip install "requests[socks]"); punkt końcowy HTTP działa z standardową instalacją. Proxysy s4m to datacenter SOCKS5 i HTTP, rozliczane za gigabajt — zobacz cennik. Jeśli potrzebujesz tylko tymczasowych punktów końcowych do szybkich testów, darmowa publiczna lista proxy to osobna, zewnętrzna pula (korzystasz na własne ryzyko). Wybierasz między pełnym tunelem a proxy? Przeczytaj porównanie, przegląd VPN lub więcej przewodników.

Pełny przykład do uruchomienia

Zamień USER:PASS na swoje dane logowania do proxy. To sprawdza Twój IP wyjściowy, ponownie wykorzystuje sesję, a następnie rotuje w małej puli z czasami oczekiwania i ponownymi próbami.

python
import random
import requests
from requests.exceptions import RequestException

# --- Credentials & endpoints (replace with your s4m.online proxy user) ---
USER = "USER"
PASS = "PASS"
HOST = "proxy.s4m.online"

# SOCKS5 with REMOTE DNS (socks5h) — needs: pip install "requests[socks]"
SOCKS5 = f"socks5h://{USER}:{PASS}@{HOST}:1080"
# Plain HTTP CONNECT proxy — works with a stock requests install
HTTP   = f"http://{USER}:{PASS}@{HOST}:3128"

def proxies_for(proxy_url):
    # The "http"/"https" keys are the scheme of the TARGET url,
    # not the proxy's protocol — both can point at one proxy.
    return {"http": proxy_url, "https": proxy_url}

def check_ip(session, proxy):
    r = session.get(
        "https://api.ipify.org?format=json",
        proxies=proxies_for(proxy),
        timeout=(5, 15),   # (connect, read) seconds
    )
    r.raise_for_status()
    return r.json()["ip"]

# --- Per-session config: pools connections, keeps cookies/headers ---
with requests.Session() as s:
    s.headers.update({"User-Agent": "s4m-example/1.0"})
    print("Exit IP:", check_ip(s, SOCKS5))

# --- Rotate across a list, retrying on failure ---
POOL = [SOCKS5, HTTP]

def fetch(url, retries=3):
    last_err = None
    for attempt in range(1, retries + 1):
        proxy = random.choice(POOL)
        try:
            with requests.Session() as s:
                r = s.get(url, proxies=proxies_for(proxy), timeout=(5, 15))
                r.raise_for_status()
                return r
        except RequestException as e:
            last_err = e
            print(f"[{attempt}/{retries}] {proxy} failed: {e}")
    raise last_err

resp = fetch("https://httpbin.org/ip")
print(resp.json())

Na żądanie, na sesję lub globalnie

Na żądanie

Przekaż proxies= do każdego wywołania: requests.get(url, proxies=proxies_for(SOCKS5), timeout=10). Najbardziej explicytna forma i najłatwiejsza do zamiany lub rotacji na podstawie każdego wywołania.

Na sesję

Ustaw to raz za pomocą session.proxies = proxies_for(SOCKS5). Każde żądanie wykonane przez tę sesję dziedziczy proxy i ponownie wykorzystuje połączenia TCP, co jest szybsze niż nowe get() za każdym razem.

Globalnie przez środowisko

requests szanuje HTTP_PROXY, HTTPS_PROXY i ALL_PROXY. Eksportuj ALL_PROXY=socks5h://USER:PASS@proxy.s4m.online:1080, a każde żądanie będzie kierowane bez zmiany kodu. Użyj NO_PROXY, aby wykluczyć hosty, lub trust_env=False w Sesji, aby zignorować środowisko.

Rzeczy, które wprowadzają ludzi w błąd

Autoryzacja wchodzi w URL

Wprowadź USER:PASS@ bezpośrednio w adresie URL proxy, a requests wyśle dane uwierzytelniające za Ciebie. Jeśli Twoje hasło zawiera znaki @, : lub /, najpierw zakoduj je za pomocą urllib.parse.quote.

Zachowaj DNS zdalny

socks5 rozwiązuje nazwy hostów na Twoim komputerze; socks5h rozwiązuje je na proxy. Użyj socks5h, gdy celem jest utrzymanie Twoich zapytań i adresu IP poza radarami celu.

Wykorzystaj sesję ponownie

requests.Session grupuje połączenia i utrzymuje ciasteczka, więc seria żądań przez jedno proxy jest zauważalnie szybsza niż wywoływanie requests.get() na zimno za każdym razem.

Zostaw weryfikację TLS włączoną

Proxy tylko przekazuje twój ruch — nie ma powodu, aby ustawiać verify=False. Utrzymuj włączoną weryfikację certyfikatu, aby pośrednik nie mógł cicho manipulować odpowiedziami HTTPS.

FAQ

Pytania, odpowiedzi

Czy proxy SOCKS5 potrzebują dodatkowego pakietu?

Tak. requests potrzebuje PySocks do wsparcia SOCKS: zainstaluj go za pomocą pip install "requests[socks]". Punkt końcowy HTTP na porcie 3128 działa z domyślną instalacją requests i bez dodatkowych zależności.

Jaka jest różnica między socks5 a socks5h?

Chodzi o to, gdzie rozwiązywane jest DNS. socks5:// rozwiązuje docelową nazwę hosta na twoim własnym komputerze przed połączeniem; socks5h:// prosi proxy o jej rozwiązanie. Użyj socks5h, aby uniknąć wycieku nazw hostów, które odwiedzasz.

Dlaczego moje wyjściowe IP się nie zmienia, gdy rotuję?

Zazwyczaj słownik proxy nie jest faktycznie stosowany, lub jedna sesja ponownie wykorzystuje jedno połączenie upstream. Potwierdź, że każde żądanie przechodzi przez proxies=, zbuduj nową sesję dla każdego proxy podczas rotacji i wydrukuj odpowiedź z punktu końcowego IP-echo, aby zweryfikować.

Czy to są adresy IP z mieszkań?

Nie. Proxy s4m to punkty końcowe SOCKS5 i HTTP w datacenter, uwierzytelniane za pomocą nazwy użytkownika i hasła oraz rozliczane na podstawie gigabajtów. Oddzielna lista darmowych publicznych proxy jest zewnętrzna i niezweryfikowana do użytku produkcyjnego.

Jak pominąć martwe proxy na liście?

Owiń każdą próbę w try/except requests.exceptions.RequestException, a następnie spróbuj ponownie z następnym proxy z twojej puli. Przykład do uruchomienia powyżej robi dokładnie to z małą pętlą ponownych prób.

Proxysy stworzone, aby ukryć Twój oryginalny adres IP

Uwierzytelnione proxy SOCKS5 i HTTP w centrum danych, płatne na zasadzie pay-as-you-go, z opcjonalnym dedykowanym osobistym IP. Kieruj zapytania na proxy.s4m.online i działaj.

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.