Integracje · Początkujący

Jak korzystać z proxy z Python requests, httpx i aiohttp

Trzy linie konfiguracji na bibliotekę, a następnie wszędzie ta sama składnia nazwy użytkownika: kraj, miasto i sesja znajdują się w adresie URL serwera proxy, więc jedna brama obsługuje każde zadanie.

3 min odczytu 6 sekcji Sprawdzono Zespół redakcyjny Proxy Cyber

URL serwera proxy#

Każda biblioteka HTTP Pythona przyjmuje serwer proxy jako adres URL. Dzięki Proxy Cyber adres URL zawiera Twoje dane uwierzytelniające, a plik parametry docelowe w nazwie użytkownika; nazwa hosta to brama, a port wybiera protokół.

Proxy URL
# Rotating: a new United States household on every new connection
http://USER-cc-us:PASS@res.proxy-cyber.com:9000

# Sticky: one Berlin household held for 30 minutes under the id "job42"
http://USER-cc-de-city-berlin-sid-job42-ttl-30m:PASS@res.proxy-cyber.com:9000

# SOCKS5 with remote DNS (socks5h), same parameters
socks5h://USER-cc-us:PASS@res.proxy-cyber.com:9001

wnioski#

Ponowne wykorzystanie połączenia i przypisanie adresu IP to różne elementy sterujące. Sesja klienta ponownie wykorzystuje gniazda; tylko przypisana brama określa zachowanie rotacji i sesji trwałej. Użyj parametrów sesji dostarczonych z usługą i zweryfikuj wyjście w kilku żądaniach. Zamknięcie gniazda lub wysłanie połączenia: zamknięcie nie gwarantuje innego adresu IP.

wnioski
import requests

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
proxies = {"http": PROXY, "https": PROXY}

# One request, one exit
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)

# A sticky flow: same exit for every request of this session
sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000"
s = requests.Session()
s.proxies = {"http": sticky, "https": sticky}
s.get("https://example.com/product/1", timeout=30)
s.post("https://example.com/cart", json={"id": 1}, timeout=30)

httpx#

httpx bierze jedną proxy= argument (starsze wersje: proxies=). Obsługuje protokół HTTP/2 do miejsca docelowego przez tunel CONNECT i działa w ten sam sposób w kodzie asynchronicznym.

httpx
import httpx

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

with httpx.Client(proxy=PROXY, timeout=30) as client:
    print(client.get("https://api.ipify.org").text)

# async, one sticky exit per task
import asyncio

async def fetch(sid: str, url: str) -> str:
    proxy = f"http://USER-cc-us-sid-{sid}-ttl-10m:PASS@res.proxy-cyber.com:9000"
    async with httpx.AsyncClient(proxy=proxy, timeout=30) as client:
        return (await client.get(url)).text

asyncio.run(fetch("task1", "https://api.ipify.org"))

aiohttp#

aiohttp pobiera serwer proxy na żądanie lub na sesję i natywnie obsługuje serwery proxy HTTP; SOCKS5 potrzebuje aiohttp-socks złącze.

aiohttp
import aiohttp, asyncio

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://api.ipify.org", proxy=PROXY, timeout=aiohttp.ClientTimeout(total=30)) as r:
            print(await r.text())

asyncio.run(main())

Obrót, utrzymanie przy życiu i powtórki#

  • Nowe połączenie TCP jest nowym połączeniem transportowym, a nie dowodem nowego wyjścia. Tryb rotacji przypisany bramie decyduje o sposobie trasowania tego połączenia.
  • Użyj odrębnego identyfikatora sesji dla każdego niezależnego przepływu pracy, jeśli obsługuje go przypisana brama. Potwierdź dozwolony czas trwania i parametry lokalizacji w szczegółach połączenia. Urządzenie domowe może odłączyć się przed żądanym czasem trwania; sesja lepka nie gwarantuje tego samego adresu IP przez kilka dni. Aby uzyskać stały adres, porównaj dedykowany produkt statyczny.
  • Sklasyfikuj odpowiedź przed ponowną próbą. Wartość 403 może wskazywać regułę dostępu, której inny adres IP nie rozwiąże. W przypadku numeru 429 przestrzegaj opcji Retry-After i zmniejsz liczbę żądań; użyj ograniczonego wycofywania w przypadku tymczasowego połączenia lub awarii serwera. Ponów operację zmieniającą stan tylko wtedy, gdy możesz zapobiec duplikowaniu akcji.
  • Ustaw limity czasu na typ wyjścia: 15 s połączenia i 45 s odczytu dla urządzeń domowych, więcej dla urządzeń mobilnych.

Zapisywanie gigabajtów#

Ruch mieszkaniowy jest rozliczany za GB w obu kierunkach. Poproś o skompresowane odpowiedzi (Accept-Encoding: gzip, br jest domyślnie włączona w tych bibliotekach), preferuj punkty końcowe JSON od HTML i nigdy nie pobieraj obrazów, czcionek ani multimediów, chyba że są to dane. Strona o rozmiarze 350 KB jest tania; strona o rozmiarze 4 MB z zasobami nie jest.

Pytania, które ludzie zadają#

Dlaczego ciągle dostaję ten sam adres IP z żądaniami?

Powtarzające się adresy IP mogą wynikać z puli połączeń, aktywnej sesji trwałej lub dostępnej puli. Porównaj przypisany tryb routingu i przetestuj kilka żądań ze znacznikami czasu. A request.Session zarządza połączeniami i plikami cookie; sam nie wybiera wyjścia proxy.

Czy potrzebuję innego proxy dla stron HTTPS?

Nie. Ten sam adres URL proxy http:// obsługuje miejsca docelowe HTTPS poprzez tunel CONNECT; TLS działa od końca do końca między kodem a witryną.

Czy mogę używać tego samego kodu dla mobilnych proxy?

Tak: zamień res.proxy-cyber.com na mob.proxy-cyber.com. Porty, dane uwierzytelniające i parametry są identyczne.

Twoje konto

Zarządzaj swoimi proxy na jednym koncie

Porównuj sieci, składaj zamówienia i śledź saldo oraz prośby o wsparcie z jednego pulpitu nawigacyjnego. Nasz zespół sprawdza płatności i podaje szczegóły połączenia po dostawie.

Utwórz konto