Sin KYC — sin ID, sin selfie, sin documentos. Pago con criptomonedas: BTC, USDT, USDC, ETH, SOL, LTC.
Idioma: Español
Alquilar un puerto

Guía · Python 3 · requests, httpx, SOCKS5

Cómo usar un proxy móvil en Python con rotación de IP

Código Python listo para un puerto dedicado CellMast o la pool móvil rotativa: conecta, rota, espera la nueva dirección y reintenta sin saturar la API.

Última actualización: · 4 min de lectura

Respuesta rápida

¿Cómo uso un proxy móvil en Python con rotación de IP?

Pasa la URL del proxy http://USERNAME:[email protected]:7777 a requests o httpx, luego llama a POST /api/v1/mobile/{portId}/rotate con tu clave API cuando quieras una nueva IP del operador. Espera la respuesta, que suele tardar 5–15 segundos, y respeta el intervalo de 30 segundos entre rotaciones. CellMast puertos dedicados 4G/5G desde $2.63/día, sin KYC, se puede pagar con criptomonedas.

Lo que necesitas

Python3.10 o superior
Libreríasrequests (HTTP), requests[socks] o httpx[socks] para SOCKS5
Gatewaygw.cellmast.com, puerto HTTP 7777, puerto SOCKS5 7778
Credenciales del puertoUsuario y contraseña desde el área del cliente; después que soporte mueve un puerto, lee de nuevo su host, puertos y contraseña en el área del cliente, porque pueden cambiar
Clave APICon el ámbito proxies, para rotación
Usuario para pool rotativaUSERNAME-country-{cc}-session-{id}-ttl-{minutes}

¿Cómo envío una solicitud a través de un puerto móvil?

Configura la misma URL del proxy para http y https. Para objetivos HTTPS, requests abre un túnel CONNECT a través de la pasarela, así el objetivo ve la IP del operador y tu TLS permanece de extremo a extremo.

solicitudes a través de HTTP
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>'}
SOCKS5 (pip install "requests[socks]")
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)

¿Cómo rotar la IP desde Python?

Envuelve la llamada de rotación en una función auxiliar que entienda la respuesta 429. El asistente a continuación espera Retry-After cuando rotas demasiado pronto, luego verifica que el operador realmente haya asignado una dirección nueva.

Asistente de rotación
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"))

¿Cómo rotar entre trabajos, no dentro de ellos?

Ejecuta todo un trabajo con una sola dirección y rota antes del siguiente. Esto mantiene las cookies y sesiones iniciadas consistentes dentro de un trabajo y da a cada trabajo una dirección fresca.

Una IP por trabajo
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 example

¿Cómo usar la piscina rotativa con sesiones persistentes en httpx?

En la piscina por GB no hay llamada de rotación: el nombre de usuario decide. Sin un ID de sesión, cada nueva conexión recibe una IP nueva. Los clientes HTTP mantienen las conexiones abiertas (keep-alive), así que para una IP nueva por solicitud abre un cliente nuevo para cada solicitud, o envía Connection: close. Con session-<id>-ttl-<minutes>, las solicitudes mantienen una IP durante ese tiempo.

httpx (pip install httpx)
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)

¿Qué errores debe manejar mi script?

  • HTTP 429 de la API de rotación: rotaste hace menos de 30 segundos. Espera Retry-After.
  • HTTP 409 port_not_active: el puerto expiró o está suspendido. Revisa el área de cliente.
  • Errores de conexión proxy justo después de rotar: normal; el módem se está reconectando. Reintenta tras una pausa corta.
  • HTTP 407 de la pasarela: usuario o contraseña erróneos para el puerto.
  • Objetivos que responden 403 o 429: reduce la velocidad primero, luego rota una vez. Las IPs móviles son compartidas y un ritmo más calmado soluciona la mayoría.

Python y proxies móviles: preguntas

¿Debo usar HTTP o SOCKS5 en Python?

HTTP es más simple y funciona con requests puro. SOCKS5 requiere el extra de requests[socks] pero soporta cualquier tráfico TCP, y socks5h:// resuelve DNS del lado del proxy en vez de tu máquina. Ambos alcanzan el mismo módem CellMast: HTTP en el puerto 7777, SOCKS5 en el puerto 7778.

¿Puedo usar asyncio con un proxy móvil?

Sí. httpx.AsyncClient(proxy=...) y aiohttp aceptan ambos una URL HTTP del proxy. Mantén la concurrencia moderada en un solo puerto dedicado: es un módem con una conexión de operador, así que docenas de solicitudes paralelas comparten el mismo enlace radio.

¿Cómo hago que Selenium o Playwright usen el puerto?

En Playwright, pasa proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"} a launch() o new_context(). Las opciones de proxy de Selenium no aceptan contraseña: responde la autenticación del proxy con Selenium 4 BiDi, o usa Playwright. Rota entre contextos del navegador, nunca mientras se carga una página.

Obtén un puerto y una clave API

Puertos 4G/5G dedicados de $2.63/día, datos móviles rotativos de 1,50 US$/GB. Pagar con criptomonedas.

Datos ilimitados

Alquilar un puerto