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.
# 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:9001Anträ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.
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.
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.
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.