La URL del proxy#
Cada biblioteca HTTP de Python toma un proxy como URL. Con Proxy Cyber, la URL lleva sus credenciales y la parámetros de orientación en el nombre de usuario; el nombre de host es la puerta de enlace y el puerto elige el protocolo.
# Rotating: a new United States household on every new connection
http://USER-cc-us:PASS@res.proxy-cyber.com:9000
# Sticky: one Berlin household held for 30 minutes under the id "job42"
http://USER-cc-de-city-berlin-sid-job42-ttl-30m:PASS@res.proxy-cyber.com:9000
# SOCKS5 with remote DNS (socks5h), same parameters
socks5h://USER-cc-us:PASS@res.proxy-cyber.com:9001solicitudes#
Reutilizar conexiones y asignar IP son mecanismos distintos. La sesión del cliente conserva sockets; el gateway entregado determina la rotación y las sesiones persistentes. Usa los parámetros facilitados con tu servicio y comprueba la salida con varias solicitudes. Cerrar un socket o enviar Connection: close no garantiza otra IP.
import requests
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
proxies = {"http": PROXY, "https": PROXY}
# One request, one exit
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)
# A sticky flow: same exit for every request of this session
sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000"
s = requests.Session()
s.proxies = {"http": sticky, "https": sticky}
s.get("https://example.com/product/1", timeout=30)
s.post("https://example.com/cart", json={"id": 1}, timeout=30)httpx#
httpx toma un solo proxy= argumento (versiones anteriores: proxies=). Admite HTTP/2 al destino a través del túnel CONNECT y funciona de la misma manera en código asíncrono.
import httpx
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
with httpx.Client(proxy=PROXY, timeout=30) as client:
print(client.get("https://api.ipify.org").text)
# async, one sticky exit per task
import asyncio
async def fetch(sid: str, url: str) -> str:
proxy = f"http://USER-cc-us-sid-{sid}-ttl-10m:PASS@res.proxy-cyber.com:9000"
async with httpx.AsyncClient(proxy=proxy, timeout=30) as client:
return (await client.get(url)).text
asyncio.run(fetch("task1", "https://api.ipify.org"))aiohttp#
aiohttp toma el proxy por solicitud o por sesión y habla proxy HTTP de forma nativa; SOCKS5 necesita el aiohttp-socks conector.
import aiohttp, asyncio
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
async def main():
async with aiohttp.ClientSession() as session:
async with session.get("https://api.ipify.org", proxy=PROXY, timeout=aiohttp.ClientTimeout(total=30)) as r:
print(await r.text())
asyncio.run(main())Rotación, mantenimiento de vida y reintentos.#
- Una conexión TCP nueva es una conexión de transporte, no una prueba de cambio de salida. La ruta depende del modo de rotación configurado en el gateway.
- Asigna un identificador de sesión distinto a cada flujo independiente cuando el gateway lo admita. Confirma la duración y los parámetros geográficos en los datos de conexión. Un dispositivo residencial puede desconectarse antes del plazo solicitado; una sesión persistente no garantiza la misma IP durante días. Para una dirección fija, compara productos estáticos dedicados.
- Identifica la causa antes de reintentar. Un 403 puede responder a una regla de acceso que no se resuelve cambiando de IP. Ante un 429, respeta Retry-After y reduce la frecuencia; aplica esperas progresivas y límites a fallos temporales de red o servidor. Evita duplicar operaciones que modifican datos.
- Establezca tiempos de espera para el tipo de salida: 15 s de conexión y 45 s de lectura para residencial, más para móvil.
Ahorrando gigabytes#
El tráfico residencial se factura por GB en ambas direcciones. Solicite respuestas comprimidas (Accept-Encoding: gzip, br está activado de forma predeterminada en estas bibliotecas), prefiera los puntos finales JSON a HTML y nunca descargue imágenes, fuentes o medios a menos que sean los datos. Una página de 350 KB es barata; una página de 4 MB con recursos no lo es.
Preguntas que hace la gente#
¿Por qué sigo recibiendo la misma IP con las solicitudes?
Una IP repetida puede deberse al pool de conexiones, a una sesión persistente o al conjunto de salidas disponible. Revisa el modo asignado y prueba varias solicitudes con su hora. requests.Session gestiona conexiones y cookies; no elige por sí misma la IP de salida.
¿Necesito un proxy diferente para los sitios HTTPS?
No. La misma URL del proxy http:// maneja destinos HTTPS a través de un túnel CONNECT; TLS se ejecuta de un extremo a otro entre su código y el sitio.
¿Puedo usar el mismo código para proxies móviles?
Sí: reemplace res.proxy-cyber.com con mob.proxy-cyber.com. Los puertos, credenciales y parámetros son idénticos.