Integrationen · Anfänger

So verwenden Sie Proxys mit Python-Anfragen, httpx und aiohttp

Drei Konfigurationszeilen pro Bibliothek, dann überall die gleiche Benutzernamenssyntax: Land, Stadt und Sitzung leben in der Proxy-URL, sodass ein Gateway alle Aufgaben erledigt.

3 min Lesezeit 6 Abschnitte Geprüft Redaktion Proxy Cyber

Die Proxy-URL#

Jede Python-HTTP-Bibliothek akzeptiert einen Proxy als URL. Bei Proxy Cyber trägt die URL Ihre Anmeldeinformationen und die Zielparameter im Benutzernamen; Der Hostname ist das Gateway und der Port wählt das Protokoll aus.

Proxy-URLs
# 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

Anträge#

Die Wiederverwendung von Verbindungen und die IP-Zuweisung sind unterschiedliche Steuerelemente. Eine Clientsitzung verwendet Sockets wieder. Nur das zugewiesene Gateway bestimmt die Rotation und das Sticky-Session-Verhalten. Verwenden Sie die mit Ihrem Dienst bereitgestellten Sitzungsparameter und überprüfen Sie den Exit über mehrere Anfragen hinweg. Das Schließen eines Sockets oder das Senden von Connection: close garantiert keine andere IP.

Anträge
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 nimmt eine einzelne proxy= Argument (ältere Versionen): proxies=). Es unterstützt HTTP/2 zum Ziel über den CONNECT-Tunnel und funktioniert auf die gleiche Weise im asynchronen Code.

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 nimmt den Proxy pro Anfrage oder pro Sitzung und spricht HTTP-Proxys nativ; SOCKS5 braucht das aiohttp-socks Steckverbinder.

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())

Rotation, Keep-alive und Retrie#

  • Eine neue TCP-Verbindung ist eine neue Transportverbindung und kein Beweis für einen neuen Exit. Der dem Gateway zugewiesene Rotationsmodus entscheidet darüber, wie diese Verbindung weitergeleitet wird.
  • Verwenden Sie für jeden unabhängigen Workflow eine eindeutige Sitzungskennung, sofern das zugewiesene Gateway dies unterstützt. Bestätigen Sie die zulässigen Dauer- und Standortparameter in Ihren Verbindungsdetails. Ein Heimgerät kann die Verbindung vor Ablauf der angeforderten Dauer trennen; Eine Sticky-Sitzung ist keine Garantie für die gleiche IP-Adresse über mehrere Tage hinweg. Vergleichen Sie für eine feste Adresse ein dediziertes statisches Produkt.
  • Klassifizieren Sie die Antwort, bevor Sie es erneut versuchen. Ein 403 kann auf eine Zugriffsregel hinweisen, die eine andere IP nicht auflöst. Beachten Sie bei 429 Retry-After und reduzieren Sie die Anforderungsrate. Verwenden Sie einen begrenzten Backoff für vorübergehende Verbindungs- oder Serverausfälle. Wiederholen Sie Vorgänge zur Statusänderung nur dann, wenn Sie doppelte Aktionen verhindern können.
  • Legen Sie Zeitüberschreitungen für den Exit-Typ fest: 15 s Verbindung und 45 s Lesen für Privathaushalte, mehr für Mobilgeräte.

Gigabyte sparen#

Der Privatverkehr wird pro GB in beide Richtungen abgerechnet. Fordern Sie komprimierte Antworten an (Accept-Encoding: gzip, br ist in diesen Bibliotheken standardmäßig aktiviert), bevorzugen Sie JSON-Endpunkte gegenüber HTML und laden Sie niemals Bilder, Schriftarten oder Medien herunter, es sei denn, es handelt sich um Daten. Eine 350-KB-Seite ist günstig; Eine 4 MB große Seite mit Assets ist es nicht.

Fragen, die Menschen stellen#

Warum erhalte ich immer die gleiche IP mit Anfragen?

Wiederholte IPs können aus Verbindungspooling, einer aktiven Sticky-Sitzung oder dem verfügbaren Pool resultieren. Vergleichen Sie den zugewiesenen Routing-Modus und testen Sie mehrere Anfragen mit Zeitstempeln. Eine „requests.Session“ verwaltet Verbindungen und Cookies. Der Proxy-Exit wird nicht selbst ausgewählt.

Benötige ich einen anderen Proxy für HTTPS-Sites?

Nein. Die gleiche http://-Proxy-URL verarbeitet HTTPS-Ziele über einen CONNECT-Tunnel. TLS läuft Ende-zu-Ende zwischen Ihrem Code und der Site.

Kann ich den gleichen Code für mobile Proxies verwenden?

Ja: Ersetzen Sie res.proxy-cyber.com durch mob.proxy-cyber.com. Ports, Anmeldeinformationen und Parameter sind identisch.

Dein Konto

Verwalten Sie Ihre Proxies in einem Konto

Vergleichen Sie Netzwerke, geben Sie Bestellungen auf und verfolgen Sie Ihren Kontostand und Supportanfragen über ein Dashboard. Unser Team prüft die Zahlungen und stellt nach der Lieferung Verbindungsdetails bereit.

Konto erstellen