# Python Requests con un proxy estático

> Python Requests con un proxy estático: código probado para HTTP y SOCKS5, una comprobación de IP de salida y una IP por cuenta. IPs de SteadyProxy desde 2,24 US$, sin KYC, cripto.

- URL: https://steadyproxy.com/es/guides/python-static-proxy/
- Última actualización: 2026-10-19
- Publisher: SteadyProxy (https://steadyproxy.com)

Construye la URL del proxy a partir de los cuatro valores de tu IP, pásala para http y https, define tiempos de espera y comprueba la IP de salida. Probado el 19 de octubre de 2026.

**Respuesta rápida — ¿Cómo uso Python Requests con un proxy estático?**

Para usar Python Requests con un proxy estático, construye la URL del proxy a partir del host, el puerto, el usuario y la contraseña de tu IP. Pásala en las claves http y https de proxies=, define un timeout y comprueba la IP de salida en api.ipify.org. **SteadyProxy** las IP estáticas cuestan 2,24 US$ por 30 días a octubre de 2026, sin KYC y con pago en criptomonedas.

## ¿Cuáles son los datos clave?

| Atributo | Valor |
| --- | --- |
| Instalación | python -m pip install requests (SOCKS5: requests[socks]) |
| URL del proxy HTTP | http://USERNAME:PASSWORD@host:port, for both the http and https keys |
| URL del proxy SOCKS5 | socks5h://USUARIO:CONTRASEÑA@host:puerto (puerto SOCKS5 por defecto 7778) |
| Caracteres especiales | Codifica el usuario y la contraseña en URL con urllib.parse.quote |
| Proxies del entorno | session.trust_env = False ignora HTTP_PROXY definido en otro lugar |
| Timeouts | (10, 30): 10 s para conectar, 30 s para leer, en nuestros ejemplos |
| Probado | Python 3.14 y Requests 2.34, 19 de octubre de 2026, a través de un proxy de prueba protegido con contraseña |

## ¿Cómo envío una petición a través de un solo proxy estático?

Cada IP estática viene con su propio host, puerto, usuario y contraseña en tu panel. Ponlos en variables de entorno, no en el código. El script de abajo construye la URL del proxy, envía una petición a api.ipify.org y se detiene si la IP de salida no es la que esperas. Después lee el nombre de la red desde ipinfo.io. Con una contraseña incorrecta, Requests lanza un ProxyError que menciona 407 Proxy Authentication Required, como mostró nuestra prueba.

*python_requests.py: un proxy estático con comprobación de IP de salida*

```python
"""Python Requests through one static proxy, with a check of the exit IP.

Install: python -m pip install requests
"""
import os
from urllib.parse import quote

import requests

HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
PORT = os.environ.get("PROXY_PORT", "7777")
USER = quote(os.environ.get("PROXY_USER", "USERNAME"), safe="")
PASSWORD = quote(os.environ.get("PROXY_PASS", "PASSWORD"), safe="")
EXPECTED_IP = os.environ.get("EXPECTED_IP")  # the static IP listed in your dashboard

# The proxy URL starts with http:// even for https:// sites (Requests opens a CONNECT tunnel)
PROXY = "http://" + USER + ":" + PASSWORD + "@" + HOST + ":" + PORT
PROXIES = {"http": PROXY, "https": PROXY}

with requests.Session() as session:
    session.trust_env = False  # ignore HTTP_PROXY / HTTPS_PROXY set elsewhere on the machine
    response = session.get("https://api.ipify.org?format=json", proxies=PROXIES, timeout=(10, 30))
    response.raise_for_status()
    exit_ip = response.json()["ip"]
    print("Exit IP:", exit_ip)
    if EXPECTED_IP and exit_ip != EXPECTED_IP:
        raise SystemExit("Exit IP differs from the static IP you expected")

    page = session.get("https://ipinfo.io/json", proxies=PROXIES, timeout=(10, 30))
    page.raise_for_status()
    print("Network:", page.json().get("org"), "-", page.json().get("country"))

```

## ¿Por qué la URL del proxy es http:// para sitios https://?

La clave del diccionario proxies es el esquema del sitio de destino; el valor es la dirección del proxy. Para un sitio https://, Requests pide al proxy HTTP que abra un túnel CONNECT y luego ejecuta TLS a través de él hasta el sitio. El proxy nunca ve la página descifrada. Por eso ambas claves apuntan a la misma URL de proxy http://. Mantén activadas las comprobaciones de certificado: nunca pongas verify=False para que desaparezca un error de proxy.

## ¿Cómo doy a cada cuenta su propia IP estática?

Asigna cada cuenta o tarea a una IP y crea una Session por asignación. Una Session conserva las cookies y reutiliza conexiones, y con trust_env = False su ajuste de proxies no se sustituye por variables de entorno. El ejemplo de abajo lee una línea por IP, en el orden host, puerto, usuario, contraseña, que puedes copiar de los cuatro valores de tu panel.

*python_per_account.py: una Session por IP estática*

```python
"""One static IP per account or per job with Python Requests.

Each line holds the four values shown for one IP in your dashboard:
host:port:username:password
"""
import os
from urllib.parse import quote

import requests

STATIC_IPS = {
    "store-uk": os.environ.get("PROXY_STORE_UK", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
    "store-de": os.environ.get("PROXY_STORE_DE", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
}


def session_for(name):
    host, port, user, password = STATIC_IPS[name].split(":", 3)
    proxy = "http://" + quote(user, safe="") + ":" + quote(password, safe="") + "@" + host + ":" + port
    session = requests.Session()
    session.trust_env = False
    session.proxies = {"http": proxy, "https": proxy}
    return session


for account in STATIC_IPS:
    with session_for(account) as s:
        ip = s.get("https://api.ipify.org", timeout=(10, 30)).text
        print(account, "->", ip)

```

## ¿Cómo uso SOCKS5 en lugar de HTTP?

Instala requests[socks] y cambia http:// por socks5h:// y el puerto HTTP por el puerto SOCKS5. La h hace que el proxy resuelva los nombres de host, así las respuestas DNS coinciden con el país de la IP. El resto del código no cambia. Tienes un ejemplo completo y probado en la [guía de proxy estático SOCKS5](https://steadyproxy.com/es/guides/socks5-static-proxy/). Ambos puertos de una misma IP estática llevan a la misma IP de salida.

## ¿Qué significan los errores más comunes?

Cada error apunta a una capa.

- **ProxyError con 407**: usuario o contraseña incorrectos, o esta máquina no está en tu allowlist.
- **ConnectTimeout**: host o puerto incorrectos, o un firewall de tu lado bloquea el tráfico saliente al puerto del proxy.
- **ReadTimeout**: el destino o la ruta va lento; reintenta más tarde y mantén el timeout de lectura.
- **SSLError**: un problema de certificado en el destino o en tu máquina; no desactives la verificación.
- **403 o 429 del destino**: el sitio rechazó o limitó la petición; baja el ritmo.

Si una IP falla en todas las peticiones durante una hora, contacta con soporte. Nuestra regla de reemplazo: Si una IP no funciona, escribe a soporte: la reparamos o la sustituimos por otra IP del mismo país cuando haya stock.

## ¿Qué más pregunta la gente sobre Python y los proxies estáticos?

### ¿Por qué defino las claves http y https?

Requests elige el proxy según el esquema de la URL de destino. Sin la clave https, las peticiones a sitios https:// saldrían directamente, desde tu propia IP. Definir ambas claves con la misma URL de proxy envía todas las peticiones a través de la IP estática. La comprobación en api.ipify.org del script detecta al instante una clave que falte.

### ¿Por qué codificar en URL el usuario y la contraseña?

Caracteres como @, : y / tienen un significado dentro de una URL. Una contraseña con un @ se leería como el final de la parte del login. urllib.parse.quote con safe='' los codifica, y Requests los decodifica antes de enviar el login al proxy. Esto funciona tanto para URLs HTTP como socks5h://.

### ¿Por qué poner trust_env en False?

Requests lee HTTP_PROXY, HTTPS_PROXY y NO_PROXY del entorno por defecto, y la documentación advierte de que los proxies del entorno pueden sobrescribir el ajuste proxies de una Session. Un VPN o una configuración corporativa podría entonces enrutar algunas peticiones por otro lado. trust_env = False hace que el código use solo el proxy que le pasas.

### ¿Puedo usar el mismo código con httpx o aiohttp?

Sí, la idea es la misma: una URL de proxy construida a partir de host, puerto, usuario y contraseña, más un timeout y una comprobación de IP de salida. Los nombres de los parámetros cambian según la librería y la versión, así que sigue la documentación de proxies de esa librería. Mantén un cliente por IP estática, como con las Sessions en Requests.

### ¿Cómo mantengo las credenciales fuera de mi repositorio?

Léelas de variables de entorno o de un gestor de secretos, como hacen los ejemplos, y nunca hagas commit de un archivo .env con valores reales. No imprimas la URL del proxy en los logs, porque contiene la contraseña. Con el método de allowlist de IP, los scripts en máquinas permitidas no necesitan contraseña de proxy en absoluto.

### ¿Cuántas peticiones puede manejar una IP estática en Python?

El proxy cobra por IP y por 30 días, no por GB. Se factura por IP y por 30 días, no por GB; se aplica uso razonable. El límite real es el sitio de destino, que puede limitar la tasa de una IP. Mantén una concurrencia moderada por IP, añade pausas y respeta los términos de cada sitio. Para más volumen en una tarea, reparte el trabajo entre varias IP; consulta [¿cuántas IP estáticas necesito?](https://steadyproxy.com/es/guides/how-many-static-ips/).

## ¿Qué fuentes usa esta guía?

1. [Uso avanzado de Requests: proxies, SOCKS, timeouts](https://requests.readthedocs.io/en/latest/user/advanced/) — Requests (2026-10-19)
2. [urllib.parse: quote](https://docs.python.org/3/library/urllib.parse.html) — Python Software Foundation (2026-10-19)
3. [API de ipify](https://www.ipify.org/) — ipify (2026-10-19)

---

SteadyProxy: SteadyProxy es un proveedor de proxies estáticos: IPs ISP (residenciales estáticas) y de datacenter dedicadas, alquiladas por IP durante 30 días, pagadas con criptomonedas sin subir identificación.
