Schnelle Antwort
Wie nutze ich einen mobilen Proxy in Python mit IP-Rotation?
Übergeben Sie die Proxy-URL http://USERNAME:[email protected]:7777 an requests oder httpx und rufen Sie POST /api/v1/mobile/{portId}/rotate mit Ihrem API-Schlüssel auf, wenn Sie eine neue Carrier-IP wollen. Warten Sie auf die Antwort, sie dauert meist 5–15 Sekunden, und halten Sie den Abstand von 30 Sekunden zwischen Rotationen ein. CellMast dedizierte 4G/5G-Ports starten bei 2,63 $/Tag, ohne KYC, Bezahlung mit Krypto.
Was Sie brauchen
| Python | 3.10 oder neuer |
|---|---|
| Bibliotheken | requests (HTTP), requests[socks] oder httpx[socks] für SOCKS5 |
| Gateway | gw.cellmast.com, HTTP-Port 7777, SOCKS5-Port 7778 |
| Port-Zugangsdaten | Benutzername und Passwort aus dem Kundenbereich; nachdem Support einen Port verschiebt, lesen Sie Host, Ports und Passwort im Kundenbereich erneut, da sich diese ändern können |
| API-Schlüssel | Mit dem proxies Scope, für Rotation |
| Rotierender Pool Benutzername | USERNAME-country-{cc}-session-{id}-ttl-{minutes} |
Wie sende ich eine Anfrage über einen mobilen Port?
Setze dieselbe Proxy-URL für http und https. Für HTTPS-Ziele öffnet requests einen CONNECT-Tunnel durch das Gateway, sodass das Ziel die Träger-IP sieht und dein TLS Ende-zu-Ende bleibt.
import requests
PROXY = "http://USERNAME:[email protected]:7777"
proxies = {"http": PROXY, "https": PROXY}
r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=30)
print(r.json()) # {'ip': '<carrier IP>'}import requests
# socks5h: the proxy resolves the hostname, not your machine
PROXY = "socks5h://USERNAME:[email protected]:7778"
r = requests.get("https://api.ipify.org", proxies={"http": PROXY, "https": PROXY}, timeout=30)
print(r.text)Wie rotiere ich die IP mit Python?
Verpacke den Rotationsaufruf in einem Helfer, der die 429-Antwort versteht. Der Helfer unten wartet Retry-After, wenn du zu früh rotierst, und prüft dann, ob der Träger wirklich eine neue Adresse vergeben hat.
import time
import requests
API = "https://cellmast.com/api/v1"
KEY = "API_KEY"
def rotate(port_id: str, tries: int = 3) -> str:
"""Ask the modem for a new carrier IP and return it."""
for _ in range(tries):
r = requests.post(f"{API}/mobile/{port_id}/rotate",
headers={"Authorization": f"Bearer {KEY}"}, timeout=60)
if r.status_code == 429: # rotation_too_soon
time.sleep(int(r.headers.get("Retry-After", "30")))
continue
r.raise_for_status()
data = r.json()
if data["ip"] != data.get("previousIp"):
return data["ip"]
time.sleep(30) # same IP from the carrier: wait and try again
raise RuntimeError("no new IP after several tries")
print("new IP:", rotate("PORT_ID"))Wie rotiere ich zwischen Jobs, nicht innerhalb?
Führe einen kompletten Job mit einer Adresse aus und rotiere dann vor dem nächsten. So bleiben Cookies und Logins innerhalb eines Jobs konsistent und jeder Job erhält eine frische Adresse.
import requests
PROXY = "http://USERNAME:[email protected]:7777"
def run_job(urls):
with requests.Session() as s:
s.proxies = {"http": PROXY, "https": PROXY}
for url in urls:
resp = s.get(url, timeout=30)
print(resp.status_code, url)
jobs = [["https://example.com/a", "https://example.com/b"],
["https://example.com/c"]]
for urls in jobs:
run_job(urls)
rotate("PORT_ID") # helper from the previous exampleWie verwende ich den rotierenden Pool mit Sticky Sessions in httpx?
Im per-GB-Pool gibt es keinen Rotationsaufruf: der Benutzername entscheidet. Ohne Session-ID erhält jede neue Verbindung eine neue IP. HTTP-Clients halten Verbindungen offen (keep-alive), für eine neue IP pro Anfrage öffne einen neuen Client pro Anfrage oder sende Connection: close. Mit session-<id>-ttl-<minutes> behalten Anfragen für diese Zeit eine IP.
import uuid
import httpx
def pool_client(country: str = "us", minutes: int | None = None) -> httpx.Client:
user = f"USERNAME-country-{country}"
if minutes:
user += f"-session-{uuid.uuid4().hex[:8]}-ttl-{minutes}"
proxy = f"http://{user}:[email protected]:7777"
return httpx.Client(proxy=proxy, timeout=30)
with pool_client("gb", minutes=10) as c: # same UK mobile IP for 10 minutes
print(c.get("https://api.ipify.org").text)
print(c.get("https://api.ipify.org").text)Welche Fehler sollte mein Skript abfangen?
- HTTP 429 von der Rotations-API: Du hast vor weniger als 30 Sekunden rotiert. Warte
Retry-After. - HTTP 409
port_not_active: Der Port ist abgelaufen oder gesperrt. Prüfe den Kundenbereich. - Proxy-Verbindungsfehler direkt nach einer Rotation: Normal; das Modem verbindet sich neu. Versuche es nach kurzer Pause erneut.
- HTTP 407 vom Gateway: Falscher Benutzername oder Passwort für den Port.
- Ziele mit 403 oder 429 als Antwort: Drossle zuerst das Tempo, rotiere dann einmal. Mobile IPs sind geteilt, ein ruhigeres Tempo löst meist die Probleme.
Python und mobile Proxys: Fragen
Soll ich HTTP oder SOCKS5 in Python verwenden?
HTTP ist einfacher und funktioniert mit normalem requests. SOCKS5 benötigt das requests[socks]-Extra, überträgt aber jeden TCP-Verkehr und socks5h:// löst DNS auf Proxy-Seite statt auf deiner Maschine. Beide erreichen dasselbe CellMast-Modem: HTTP auf Port 7777, SOCKS5 auf Port 7778.
Kann ich asyncio mit einem mobilen Proxy verwenden?
Ja. httpx.AsyncClient(proxy=...) und aiohttp akzeptieren beide eine HTTP-Proxy-URL. Halte die Parallelität auf einem einzelnen dedizierten Port moderat: Es ist ein Modem auf einer Trägerverbindung, also teilen sich dutzende parallele Anfragen dieselbe Funkverbindung.
Wie bringe ich Selenium oder Playwright dazu, den Port zu nutzen?
In Playwright übergib proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"} an launch() oder new_context(). Seleniums Proxyoptionen brauchen kein Passwort: Authentifiziere dich über Selenium 4 BiDi Netzwerkauthentifizierung oder nutze Playwright. Wechsle zwischen Browser-Kontexten, niemals während eine Seite lädt.
Hole dir einen Port und einen API-Schlüssel
Dedizierte 4G/5G-Ports von 2,63 $/Tag, rotierende mobile Daten von 1,50 $/GB. Bezahle mit Krypto.