# Jak korzystać z mobilnego proxy w Python z rotacją IP

> Kod Python dla mobilnych proxy 4G/5G: requests i httpx przez HTTP lub SOCKS5, rotacja IP przez API, obsługa limitów 429, sesje sticky. Bez KYC.

- URL: https://cellmast.com/pl/guides/python-mobile-proxy/
- Ostatnia aktualizacja: 2026-10-13
- Publisher: CellMast (https://cellmast.com)

Gotowy kod Python dla dedykowanego portu CellMast lub rotującej puli mobilnej: połącz się, rotuj, poczekaj na nowy adres i spróbuj ponownie bez przeciążania API.

**Szybka odpowiedź — Jak korzystać z mobilnego proxy w Python z rotacją IP?**

Przekaż adres proxy `http://USERNAME:PASSWORD@gw.cellmast.com:7777` do `requests` lub `httpx`, następnie wywołaj `POST /api/v1/mobile/{portId}/rotate` z kluczem API, gdy chcesz nowe IP operatora. Poczekaj na odpowiedź, zwykle 5–15 sekund, i zachowaj 30-sekundową przerwę między rotacjami. **CellMast** dedykowane porty 4G/5G zaczynają się od 2,63 USD/dzień, bez KYC, płatne kryptowalutą.

## Co potrzebujesz

| Atrybut | Wartość |
| --- | --- |
| Python | 3.10 lub nowszy |
| Biblioteki | `requests` (HTTP), `requests[socks]` lub `httpx[socks]` dla SOCKS5 |
| Brama | `gw.cellmast.com`, port HTTP 7777, port SOCKS5 7778 |
| Dane portu | Nazwa użytkownika i hasło z panelu klienta; po każdej zmianie portu przez support sprawdź hosta, porty i hasło ponownie w panelu, bo mogą ulec zmianie |
| Klucz API | Z zakresem `proxies`, do rotacji |
| Nazwa użytkownika puli rotującej | `USERNAME-country-{cc}-session-{id}-ttl-{minutes}` |

## Jak wysłać zapytanie przez port mobilny?

Ustaw ten sam URL proxy dla `http` i `https`. Dla celów HTTPS `requests` otwiera tunel CONNECT przez bramę, więc cel widzi adres IP operatora, a twoje TLS pozostaje end-to-end.

*zapytania przez HTTP*

```python
import requests

PROXY = "http://USERNAME:PASSWORD@gw.cellmast.com: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>'}
```

*SOCKS5 (pip install "requests[socks]")*

```python
import requests

# socks5h: the proxy resolves the hostname, not your machine
PROXY = "socks5h://USERNAME:PASSWORD@gw.cellmast.com:7778"
r = requests.get("https://api.ipify.org", proxies={"http": PROXY, "https": PROXY}, timeout=30)
print(r.text)
```

## Jak rotować adres IP z Pythona?

Opakuj wywołanie rotacji w pomocniczą funkcję, która rozumie odpowiedź 429. Pomocnik poniżej czeka `Retry-After`, gdy próbujesz zbyt wcześnie rotować, a potem sprawdza, czy operator faktycznie przydzielił nowy adres.

*Pomocnik rotacji*

```python
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"))
```

## Jak rotować między zadaniami, a nie wewnątrz nich?

Wykonaj całe zadanie na jednym adresie, a przed kolejnym rotuj. Pozwala to na spójność ciasteczek i logowań w ramach zadania oraz zapewnia każdemu zadaniu świeży adres.

*Jeden IP na zadanie*

```python
import requests

PROXY = "http://USERNAME:PASSWORD@gw.cellmast.com: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 example
```

## Jak użyć rotującej puli z sesjami sticky w httpx?

W puli rozliczanej za GB nie ma wywołania rotacji: decyduje nazwa użytkownika. Bez identyfikatora sesji każde nowe połączenie otrzymuje nowy IP. Klienci HTTP utrzymują połączenia otwarte (keep-alive), więc by wymusić nowy IP na każde zapytanie, otwórz nowego klienta dla każdego zapytania lub wyślij `Connection: close`. Z `session-<id>-ttl-<minutes>` zapytania zachowują ten sam IP przez ten czas.

*httpx (pip install httpx)*

```python
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}:PASSWORD@gw.cellmast.com: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)
```

## Jakie błędy powinien obsłużyć mój skrypt?

- **HTTP 429 z API rotacji:** zrotowałeś mniej niż 30 sekund temu. Poczekaj `Retry-After`.
- **HTTP 409 `port_not_active`:** port wygasł lub jest zawieszony. Sprawdź panel klienta.
- **Błędy połączenia proxy zaraz po rotacji:** normalne; modem się przełącza. Spróbuj ponownie po krótkiej przerwie.
- **HTTP 407 z bramy:** błędna nazwa użytkownika lub hasło do portu.
- **Cele odpowiadające 403 lub 429:** najpierw zwolnij tempo, potem rotuj raz. Mobilne IP są współdzielone, a spokojniejszy rytm rozwiązuje większość problemów.

## Python i mobilne proxy: pytania

### Czy w Pythonie używać HTTP czy SOCKS5?

HTTP jest prostszy i działa z prostym `requests`. SOCKS5 wymaga dodatkowego `requests[socks]`, ale obsługuje dowolny ruch TCP, a `socks5h://` wykonuje rozwiązywanie DNS po stronie proxy, a nie twojej maszyny. Oba trafiają na ten sam modem CellMast: HTTP na porcie 7777, SOCKS5 na porcie 7778.

### Czy mogę używać asyncio z mobilnym proxy?

Tak. `httpx.AsyncClient(proxy=...)` i `aiohttp` oba akceptują URL proxy HTTP. Zachowaj umiarkowaną równoległość na pojedynczym dedykowanym porcie: to jeden modem na jedno łącze operatora, więc dziesiątki równoczesnych zapytań korzystają z tego samego łącza radiowego.

### Jak sprawić, by Selenium lub Playwright używały portu?

W Playwright przekaż `proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"}` do `launch()` lub `new_context()`. Opcje proxy w Selenium nie przyjmują hasła: autoryzuj proxy przez uwierzytelnianie sieciowe Selenium 4 BiDi lub użyj Playwright. Rotuj pomiędzy kontekstami przeglądarki, nigdy w trakcie ładowania strony.

**Zdobądź port i klucz API** Dedykowane porty 4G/5G od 2,63 USD/dzień, rotujące mobilne dane od 1,50 USD/GB. Płać w kryptowalutach. [Zobacz cennik](https://cellmast.com/pl/pricing/) · [Mobilne API - dokumentacja](https://cellmast.com/docs/api/mobile/)

---

CellMast: CellMast to dostawca mobilnych proxy 4G/5G: dedykowane modemy operatorskie z nielimitowanym transferem oraz rotująca pula mobilnych proxy 4G płatna w kryptowalutach bez konieczności przesyłania dokumentów.
