# Cara menggunakan proxy seluler 4G di Python dengan rotasi IP

> Kode Python untuk proxy seluler 4G/5G: requests dan httpx lewat HTTP atau SOCKS5, rotasi IP via API, penanganan batas 429, sesi lengket. Tanpa KYC.

- URL: https://cellmast.com/id/guides/python-mobile-proxy/
- Terakhir diperbarui: 2026-10-13
- Publisher: CellMast (https://cellmast.com)

Kode Python siap pakai untuk port proxy residensial CellMast khusus atau pool seluler berotasi: sambungkan, rotasi, tunggu alamat baru, dan coba lagi tanpa membanjiri API.

**Jawaban cepat — Bagaimana cara menggunakan proxy seluler 4G di Python dengan rotasi IP?**

Berikan URL proxy `http://USERNAME:PASSWORD@gw.cellmast.com:7777` ke `requests` atau `httpx`, lalu panggil `POST /api/v1/mobile/{portId}/rotate` dengan kunci API Anda saat ingin IP operator baru. Tunggu balasan, biasanya 5–15 detik, dan hormati jeda 30 detik antar rotasi. **CellMast** port proxy residensial 4G/5G khusus mulai dari $2.63/hari, tanpa KYC, dibayar dengan crypto.

## Yang Anda butuhkan

| Atribut | Nilai |
| --- | --- |
| Python | 3.10 atau lebih baru |
| Library | `requests` (HTTP), `requests[socks]` atau `httpx[socks]` untuk SOCKS5 |
| Gateway | `gw.cellmast.com`, port HTTP 7777, port SOCKS5 7778 |
| Kredensial port | Nama pengguna dan kata sandi dari area klien; setelah dukungan memindahkan port, baca kembali host, port, dan kata sandi di area klien karena bisa berubah |
| Kunci API | Dengan scope `proxies`, untuk rotasi |
| Nama pengguna pool berotasi | `USERNAME-country-{cc}-session-{id}-ttl-{minutes}` |

## Bagaimana cara mengirim permintaan melalui port seluler?

Tetapkan URL proxy yang sama untuk `http` dan `https`. Untuk target HTTPS, `requests` membuka terowongan CONNECT melalui gateway, jadi target melihat IP operator dan TLS Anda tetap end to end.

*permintaan melalui 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)
```

## Bagaimana cara saya merotasi IP dari Python?

Bungkus panggilan rotasi dalam sebuah helper yang memahami jawaban 429. Helper di bawah menunggu `Retry-After` saat Anda merotasi terlalu cepat, lalu memeriksa bahwa operator benar-benar memberi alamat baru.

*Helper rotasi*

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

## Bagaimana cara rotasi antar pekerjaan, bukan di dalamnya?

Jalankan satu pekerjaan pada satu alamat, lalu rotasi sebelum pekerjaan berikutnya. Ini menjaga konsistensi cookies dan login di dalam satu pekerjaan dan memberi setiap pekerjaan alamat baru.

*Satu IP per pekerjaan*

```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
```

## Bagaimana cara menggunakan rotating pool dengan sticky sessions di httpx?

Pada pool per-GB tidak ada panggilan rotasi: nama pengguna yang menentukan. Tanpa session id, setiap koneksi baru akan mendapatkan IP baru. Klien HTTP menjaga koneksi tetap terbuka (keep-alive), jadi untuk IP baru per permintaan buka klien baru untuk setiap permintaan, atau kirim `Connection: close`. Dengan `session-<id>-ttl-<minutes>`, permintaan mempertahankan satu IP untuk waktu itu.

*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)
```

## Kesalahan apa yang harus ditangani skrip saya?

- **HTTP 429 dari API rotasi:** Anda merotasi kurang dari 30 detik yang lalu. Tunggu selama `Retry-After`.
- **HTTP 409 `port_not_active`:** port sudah kadaluwarsa atau ditangguhkan. Periksa area klien.
- **Kesalahan koneksi proxy setelah rotasi:** normal; modem sedang reconnect. Coba lagi setelah jeda singkat.
- **HTTP 407 dari gateway:** username atau password untuk port salah.
- **Target menjawab 403 atau 429:** perlambat dulu, lalu rotasi sekali. IP seluler bersifat bersama, dan kecepatan lebih tenang memperbaiki sebagian besar masalah ini.

## Python dan proxy seluler: pertanyaan

### Haruskah saya menggunakan HTTP atau SOCKS5 di Python?

HTTP lebih sederhana dan bekerja dengan `requests` biasa. SOCKS5 memerlukan ekstra `requests[socks]` tapi membawa semua lalu lintas TCP, dan `socks5h://` menyelesaikan DNS di sisi proxy, bukan mesin Anda. Keduanya mencapai modem CellMast yang sama: HTTP di port 7777, SOCKS5 di port 7778.

### Bisakah saya menggunakan asyncio dengan proxy seluler?

Ya. `httpx.AsyncClient(proxy=...)` dan `aiohttp` keduanya menerima URL proxy HTTP. Jaga konkruensi moderat di satu port khusus: ini satu modem dengan satu koneksi operator, jadi puluhan permintaan paralel berbagi tautan radio yang sama.

### Bagaimana cara membuat Selenium atau Playwright menggunakan port tersebut?

Di Playwright, kirim `proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"}` ke `launch()` atau `new_context()`. Opsi proxy Selenium tidak pakai password: jawab login proxy melalui autentikasi jaringan Selenium 4 BiDi, atau gunakan Playwright. Rotasi antar konteks browser, jangan saat halaman sedang dimuat.

**Dapatkan port dan kunci API** Port khusus 4G/5G dari $2.63/hari, data seluler berputar dari US$1,50/GB. Bayar pakai crypto. [Lihat harga](https://cellmast.com/id/pricing/) · [Referensi API seluler](https://cellmast.com/docs/api/mobile/)

---

CellMast: CellMast adalah penyedia proxy seluler 4G/5G: modem operator khusus dengan lalu lintas tanpa batas, plus pool proxy seluler rotasi per-GB, dibayar dengan crypto tanpa upload ID.
