Snel antwoord
Hoe gebruik ik een mobiele proxy in Python met IP-rotatie?
Geef de proxy-URL http://USERNAME:[email protected]:7777 door aan requests of httpx, en roep POST /api/v1/mobile/{portId}/rotate aan met je API-sleutel wanneer je een nieuw carrier IP wilt. Wacht op het antwoord, dat meestal 5–15 seconden duurt, en respecteer de 30-seconden pauze tussen rotaties. CellMast dedicated 4G/5G poorten beginnen bij $2,63/dag, zonder KYC, betaling in crypto.
Wat heb je nodig
| Python | 3.10 of nieuwer |
|---|---|
| Bibliotheken | requests (HTTP), requests[socks] of httpx[socks] voor SOCKS5 |
| Gateway | gw.cellmast.com, HTTP-poort 7777, SOCKS5-poort 7778 |
| Poortinloggegevens | Gebruikersnaam en wachtwoord uit het klantgedeelte; nadat support een poort verplaatst, lees de host, poorten en het wachtwoord opnieuw in het klantgedeelte, want die kunnen veranderen |
| API-sleutel | Met de proxies scope, voor rotatie |
| Gebruikersnaam van de roterende pool | USERNAME-country-{cc}-session-{id}-ttl-{minutes} |
Hoe stuur ik een verzoek via een mobiele poort?
Stel dezelfde proxy-URL in voor http en https. Voor HTTPS-doelen opent requests een CONNECT-tunnel via de gateway, zodat het doel de carrier IP ziet en je TLS end-to-end blijft.
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)Hoe roteer ik het IP-adres vanuit Python?
Verpak de rotatieaanroep in een helper die de 429 reactie begrijpt. De onderstaande helper wacht Retry-After als je te snel roteert, en controleert dan of de carrier echt een nieuw adres heeft gegeven.
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"))Hoe roteer ik tussen taken, niet binnen taken?
Voer een hele taak uit met één adres, roteer daarna pas naar het volgende. Dit behoudt cookies en inloggegevens binnen een taak en geeft elke taak een nieuw adres.
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 exampleHoe gebruik ik de roterende pool met sticky sessions in httpx?
In de per-GB pool is er geen rotatieaanroep: de gebruikersnaam bepaalt dat. Zonder sessie-id krijgt elke nieuwe verbinding een nieuw IP. HTTP-clients houden verbindingen open (keep-alive), dus voor een nieuw IP per verzoek open je een nieuwe client per verzoek, of stuur Connection: close. Met session-<id>-ttl-<minutes> houden verzoeken één IP vast voor die tijd.
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)Welke fouten moet mijn script afhandelen?
- HTTP 429 van de rotatie-API: je roteerde minder dan 30 seconden geleden. Wacht
Retry-After. - HTTP 409
port_not_active: de poort is verlopen of geschorst. Controleer het klantgedeelte. - Proxy-verbinding fouten net na rotatie: normaal; het modem maakt opnieuw verbinding. Probeer het na korte pauze opnieuw.
- HTTP 407 van de gateway: verkeerde gebruikersnaam of wachtwoord voor de poort.
- Doelen die 403 of 429 antwoorden: vertraag eerst, roteer dan één keer. Mobiele IP's worden gedeeld, een rustiger tempo lost de meeste problemen op.
Python en mobiele proxy's: veelgestelde vragen
Moet ik HTTP of SOCKS5 gebruiken in Python?
HTTP is eenvoudiger en werkt met gewone requests. SOCKS5 heeft de extra requests[socks] nodig maar draagt al het TCP-verkeer, en socks5h:// lost DNS op de proxyzijde op in plaats van op je machine. Beiden bereiken hetzelfde CellMast modem: HTTP via poort 7777, SOCKS5 via poort 7778.
Kan ik asyncio gebruiken met een mobiele proxy?
Ja. httpx.AsyncClient(proxy=...) en aiohttp accepteren beide een HTTP proxy-URL. Houd de gelijktijdigheid matig op een enkele toegewijde poort: het is één modem op één carrierverbinding, dus tientallen parallelle verzoeken delen dezelfde radiolink.
Hoe laat ik Selenium of Playwright de poort gebruiken?
Geef in Playwright proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"} mee aan launch() of new_context(). Selenium's proxy-opties bevatten geen wachtwoord: voer de proxy-login in via Selenium 4 BiDi netwerk authenticatie, of gebruik Playwright. Roteer tussen browsercontexten, nooit terwijl een pagina laadt.
Krijg een poort en een API-sleutel
Toegewijde 4G/5G poorten van $2,63/dag, roterende mobiele data van US$ 1,50/GB. Betaal in crypto.