Entrega automática tras confirmar el pago · IP dedicado · Soporte por ticket en el panel Pago local según tu país · Precios en dólares (USD)
ProxyBox
Automatización

Proxy en Python con requests, httpx y aiohttp

Cómo usar un proxy con usuario y contraseña en Python (requests, httpx y aiohttp), con HTTP y SOCKS5, contraseña con caracteres especiales, timeout y prueba de la IP.

3 min de lectura Actualizado el 26 de septiembre de 2026

Las bibliotecas HTTP de Python aceptan un proxy con usuario y contraseña directamente en la URL, sin extensiones ni proxy local. Esta guía cubre las tres más usadas. Para navegador automatizado, mira Selenium y Playwright, Puppeteer y Scrapy.

En el panel, en Mis proxies, copia host, puerto HTTP, puerto SOCKS5, usuario y contraseña.

requests

import requests

proxy = "http://usuario:[email protected]:8000"
proxies = {"http": proxy, "https": proxy}

r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=20)
print(r.json())

Dos claves, http y https, porque requests elige el proxy según el esquema del sitio al que accedes. Con solo http, los sitios HTTPS salen por tu IP real.

Para reutilizar conexiones en muchas peticiones, usa una sesión:

s = requests.Session()
s.proxies.update(proxies)
print(s.get("https://api.ipify.org", timeout=20).text)

SOCKS5 en requests

pip install "requests[socks]"
proxy = "socks5h://usuario:[email protected]:1080"
r = requests.get("https://api.ipify.org", proxies={"http": proxy, "https": proxy}, timeout=20)

Usa socks5h y no socks5: con la h, el nombre del sitio lo resuelve el proxy y el DNS de tu red no aparece. La diferencia entre los protocolos está en HTTP, HTTPS y SOCKS5.

httpx

import httpx

with httpx.Client(proxy="http://usuario:[email protected]:8000", timeout=20) as client:
    print(client.get("https://api.ipify.org").text)

En las versiones actuales de httpx el parámetro es proxy, en singular. El antiguo proxies se eliminó; si tu código usa proxies= y se rompió al actualizar, es por eso. Para SOCKS5, instala httpx[socks] y usa socks5:// en la URL.

La versión asíncrona es igual, con httpx.AsyncClient.

aiohttp

import asyncio
import aiohttp

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.ipify.org",
            proxy="http://p1.ejemplo.com:8000",
            proxy_auth=aiohttp.BasicAuth("usuario", "contrasena"),
            timeout=aiohttp.ClientTimeout(total=20),
        ) as resp:
            print(await resp.text())

asyncio.run(main())

aiohttp trabaja con proxy HTTP. Pasar proxy_auth por separado evita el problema de los caracteres especiales en la URL. Para SOCKS5, el camino es el paquete aiohttp-socks.

Contraseña con caracteres especiales

from urllib.parse import quote

usuario = quote("usuario", safe="")
contrasena = quote("c0ntr@:segura", safe="")
proxy = f"http://{usuario}:{contrasena}@p1.ejemplo.com:8000"

Errores más comunes en Python

Mensaje Causa Dónde verlo
Tunnel connection failed: 407 Proxy Authentication Required Usuario o contraseña rechazados Error 407
Unable to connect to proxy / Connection refused Host o puerto equivocados, red que bloquea El proxy no conecta
Tunnel connection failed: 502 El proxy no llegó al sitio Fallo en el túnel
Missing dependencies for SOCKS support Falta requests[socks] Instala el extra y vuelve a ejecutar
ReadTimeout Sitio o ruta lentos Aumenta el timeout y prueba con api.ipify.org

Buenas prácticas

  • Define siempre un timeout. Sin él, una petición colgada bloquea el script de forma indefinida.
  • Comprueba la IP al inicio del script con api.ipify.org, para no pasar horas trabajando con la IP equivocada.
  • Respeta los límites del sitio. Muchas peticiones por segundo desde la misma IP acaban en bloqueo. Para recoger datos en volumen, mira proxy para web scraping.
  • Recuerda lo que el proxy no resuelve. Cambia la IP de salida, pero no las cabeceras, el ritmo de las peticiones ni las condiciones de uso de cada sitio.

Preguntas frecuentes

¿Tengo que instalar algo para usar SOCKS5 en requests?
Sí. Instala requests[socks], que añade la compatibilidad con SOCKS. Después usa socks5h:// en la URL del proxy para que la resolución de nombres también pase por el proxy.
¿Cómo paso una contraseña con @ en la URL del proxy?
Codifica la contraseña con urllib.parse.quote(contrasena, safe="") antes de montar la URL. La @ pasa a ser %40 y deja de confundirse con el separador del host.
¿Puedo definir el proxy con una variable de entorno?
Sí. requests y httpx leen HTTP_PROXY y HTTPS_PROXY por defecto. Es práctico, pero vale para todo lo que se ejecuta en ese entorno; para controlarlo por petición, pasa el proxy en el código.
¿Sirve para scraping en gran volumen?
Una IP fija sirve para volumen moderado y para acceder siempre desde la misma dirección. Para muchas páginas con cambio de IP, lo adecuado es un proxy rotativo; en ProxyBox, el residencial rotativo por GB es de IP brasileña.

¿Te atascaste en algún paso?

Envíanos una captura del error por WhatsApp o abre un ticket en el panel. En la mayoría de los casos el problema es un campo intercambiado entre host y puerto.

¿Tienes dudas? Escríbenos por WhatsApp