Ir al contenido
Guides 3 min de lectura 1364 vistas

Uso de Proxies en Python con httpx

Trabajando con proxies a través de httpx: modos síncronos y asíncronos, SOCKS5, HTTP/2 a través de proxy, y comparación con requests.

Uso de Proxies en Python con httpx

Usando Proxies en Python con httpx

httpx y Proxies

httpx es una moderna librería HTTP para Python que soporta modos de operación tanto síncronos como asíncronos. Una ventaja clave es su soporte integrado para proxies HTTP/2 y SOCKS sin librerías adicionales.

Instalación

pip install httpx
# Para soporte SOCKS:
pip install httpx[socks]
# Para HTTP/2:
pip install httpx[http2]

Modo Síncrono

Proxy HTTP

import httpx

proxy = "http://user:pass@proxy_ip:port"
response = httpx.get("https://httpbin.org/ip", proxy=proxy)
print(response.json())

Diferentes Proxies para HTTP y HTTPS

proxies = {
    "http://": "http://proxy1:port",
    "https://": "http://proxy2:port",
}

with httpx.Client(proxy=proxies) as client:
    response = client.get("https://httpbin.org/ip")
    print(response.json())

Proxy SOCKS5

import httpx

proxy = "socks5://user:pass@proxy_ip:port"
with httpx.Client(proxy=proxy) as client:
    response = client.get("https://httpbin.org/ip")
    print(response.json())

Modo Asíncrono

Ejemplo Básico

import httpx
import asyncio

async def fetch():
    proxy = "http://user:pass@proxy_ip:port"
    async with httpx.AsyncClient(proxy=proxy) as client:
        response = await client.get("https://httpbin.org/ip")
        print(response.json())

asyncio.run(fetch())

Peticiones Paralelas

import httpx
import asyncio

async def fetch_url(client, url):
    try:
        response = await client.get(url, timeout=10)
        return response.text
    except Exception as e:
        return None

async def main():
    proxy = "http://user:pass@proxy_ip:port"
    urls = [f"https://example.com/page/{i}" for i in range(50)]

    async with httpx.AsyncClient(proxy=proxy) as client:
        tasks = [fetch_url(client, url) for url in urls]
        results = await asyncio.gather(*tasks)
        success = sum(1 for r in results if r)
        print(f"Success: {success}/{len(urls)}")

asyncio.run(main())

HTTP/2 a través de Proxy

httpx es una de las pocas librerías de Python con soporte HTTP/2:

import httpx

proxy = "http://user:pass@proxy_ip:port"
with httpx.Client(proxy=proxy, http2=True) as client:
    response = client.get("https://httpbin.org/ip")
    print(f"HTTP version: {response.http_version}")
    print(response.json())

HTTP/2 a través de proxy funciona mediante el método CONNECT — el proxy crea un túnel TCP a través del cual se establece una conexión HTTP/2 con el servidor.

Rotación de Proxies

import httpx
import random

PROXIES = [
    "http://user:pass@proxy1:port",
    "http://user:pass@proxy2:port",
    "http://user:pass@proxy3:port",
]

def get_random_proxy():
    return random.choice(PROXIES)

# Rotación síncrona
for i in range(10):
    proxy = get_random_proxy()
    with httpx.Client(proxy=proxy) as client:
        resp = client.get("https://httpbin.org/ip")
        print(resp.json())

Rotación Asíncrona

import httpx
import asyncio
import random

PROXIES = [
    "http://user:pass@proxy1:port",
    "http://user:pass@proxy2:port",
    "http://user:pass@proxy3:port",
]

async def fetch_with_rotation(url):
    proxy = random.choice(PROXIES)
    async with httpx.AsyncClient(proxy=proxy) as client:
        try:
            resp = await client.get(url, timeout=10)
            return resp.text
        except Exception:
            return None

async def main():
    urls = ["https://example.com"] * 20
    tasks = [fetch_with_rotation(url) for url in urls]
    results = await asyncio.gather(*tasks)
    print(f"Success: {sum(1 for r in results if r)}")

asyncio.run(main())

Configuración del Cliente

Tiempo de Espera (Timeout)

timeout = httpx.Timeout(
    connect=5.0,    # conexión al proxy y al servidor
    read=10.0,      # lectura de la respuesta
    write=5.0,      # envío de la petición
    pool=5.0        # espera en el pool de conexiones
)

client = httpx.Client(proxy=proxy, timeout=timeout)

Cabeceras y Cookies

headers = {
    "User-Agent": "Mozilla/5.0 ...",
    "Accept-Language": "en-US,en;q=0.9",
}

client = httpx.Client(
    proxy=proxy,
    headers=headers,
    follow_redirects=True,
    max_redirects=10
)

Pool de Conexiones

limits = httpx.Limits(
    max_connections=100,          # conexiones totales
    max_keepalive_connections=20  # conexiones keep-alive
)

client = httpx.AsyncClient(proxy=proxy, limits=limits)

Manejo de Errores

import httpx

async def safe_fetch(client, url):
    try:
        response = await client.get(url)
        response.raise_for_status()
        return response.text
    except httpx.ProxyError as e:
        print(f"Proxy error: {e}")
    except httpx.ConnectTimeout:
        print("Connection timeout")
    except httpx.ReadTimeout:
        print("Read timeout")
    except httpx.HTTPStatusError as e:
        print(f"HTTP {e.response.status_code}")
    except httpx.RequestError as e:
        print(f"Request error: {e}")
    return None

httpx vs requests vs aiohttp

Parámetro httpx requests aiohttp
Síncrono Sí Sí No
Asíncrono Sí No Sí
HTTP/2 Sí No No
SOCKS Sí (integrado) Vía requests-socks Vía aiohttp-socks
Proxy en URL Sí Sí Sí
API compatible con requests Estándar Personalizada
Rendimiento Alto Medio Alto

Migración desde requests

httpx está diseñado como un reemplazo directo para requests. La migración es mínima:

# requests
import requests
resp = requests.get(url, proxies={"https": proxy})

# httpx
import httpx
resp = httpx.get(url, proxy=proxy)

La principal diferencia: en httpx, se usa el parámetro proxy (singular) en lugar de proxies.

Conclusión

httpx es la mejor opción para nuevos proyectos de Python que requieran funcionalidad de proxy. Su soporte integrado para HTTP/2, SOCKS5 y modos tanto síncronos como asíncronos lo convierte en una herramienta versátil. La API compatible con requests simplifica la migración para proyectos existentes.

Actualizado: 06.03.2026
Volver a la categoría

Leer también

Guides 2 min

Proxy para Nike SNKRS: Consigue lanzamientos limitados y múltiples entradas con GProxy

Usa proxies residenciales o móviles para Nike SNKRS para participar en sorteos con múltiples cuentas, superar los límites de IP y hacer cop de drops limitados sin baneos. Qué tipo elegir y cómo configurarlo.

Guides 2 min

Cómo configurar un proxy en iPhone (Wi-Fi y SOCKS5)

Configura un proxy en iPhone mediante los ajustes nativos de Wi-Fi (HTTP/HTTPS) o una aplicación de proxy como Shadowrocket para SOCKS5 y cobertura celular. Configuración paso a paso en iOS y las limitaciones que debes conocer.

Guides 3 min

Proxy para Tinder: Cuentas Múltiples y Evitar Bloqueos

Usa proxies móviles o residenciales para Tinder para gestionar múltiples perfiles y evitar shadowbans de IP. Por qué el móvil gana, cómo configurarlo y por qué un proxy por sí solo no cambiará tu ciudad.

Guides 2 min

Proxy para StockX: Monitoree precios y gestione cuentas

Usa proxies residenciales, ISP o móviles para StockX para monitorear precios, manejar múltiples cuentas y hacer cop de drops sin baneos. Aquí tienes qué tipo elegir y cómo configurarlo.

Guides 3 min

Proxy para la API de OpenAI: acceso, límites de velocidad y configuración

Enrute la OpenAI API a través de un proxy residencial o ISP para acceder a regiones compatibles, esquivar límites de tasa 429 e aislar cuentas. Qué proxy usar más ejemplos de configuración en Python.

Guides 1 min

Aquí tienes las traducciones:

Configurando Proxy en Cypress para Pruebas E2E

Pruebe nuestros proxies

20,000+ proxies en 100+ países del mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.