Integraciones · Principiante

Cómo usar proxies en Python con requests, httpx y aiohttp

Tres líneas de configuración por biblioteca, luego la misma sintaxis de nombre de usuario en todas partes: país, ciudad y sesión se encuentran en la URL del proxy, por lo que una puerta de enlace sirve para cada trabajo.

3 minutos de lectura 6 secciones Revisado Equipo editorial Proxy Cyber

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.

URL de proxy
# 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:9001

solicitudes#

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.

solicitudes
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.

httpx
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.

aiohttp
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.

tu cuenta

Gestiona tus proxies en una sola cuenta

Compare redes, realice pedidos y siga su saldo y solicitudes de soporte desde un solo panel. Nuestro equipo revisa los pagos y proporciona detalles de conexión después de la entrega.

Crear cuenta