Guía de Python · 1 min de lectura

Cómo usar proxies con solicitudes de Python

La biblioteca de solicitudes enruta el tráfico a través de un proxy con un pequeño diccionario — pero el esquema que elijas decide si tu DNS y IP de origen permanecen ocultos. Aquí está la versión práctica, con código completamente ejecutable.

El diccionario de proxies y por qué el esquema importa

Python's requests library talks to a proxy through a single dictionary. The keys are not the proxy's protocol — they are the scheme of the target URL. So {"http": ..., "https": ...} tells requests which proxy to use when the destination is an HTTP or HTTPS site, and in practice both keys point at the same endpoint.

What actually changes your privacy is the scheme inside the proxy URL. With socks5:// your own machine resolves DNS first and then connects through the proxy, which can leak the hostnames you visit. With socks5h:// the proxy resolves DNS for you, so the target hostname never leaves your machine in the clear. For an authenticated s4m.online proxy, prefer socks5h to keep DNS remote and better hide your origin IP.

Proxy schemeDNS resolved byPortInstall
socks5h://Proxy (remote)1080requests[socks]
socks5://Your machine (local)1080requests[socks]
http://Proxy3128Stock requests

SOCKS support needs PySocks (pip install "requests[socks]"); the HTTP endpoint works with a stock install. s4m proxies are datacenter SOCKS5 and HTTP, billed per gigabyte — see pricing. If you only need throwaway endpoints for quick tests, the free public proxy list is a separate, third-party pool (use at your own risk). Choosing between a full tunnel and a proxy? Read the comparison, the VPN overview, or more guides.

Ejemplo completo ejecutable

Reemplace USER:PASS con sus credenciales de proxy. Esto verifica su IP de salida, reutiliza una sesión y luego rota a través de un pequeño grupo con tiempos de espera y reintentos.

python
import random
import requests
from requests.exceptions import RequestException

# --- Credentials & endpoints (replace with your s4m.online proxy user) ---
USER = "USER"
PASS = "PASS"
HOST = "proxy.s4m.online"

# SOCKS5 with REMOTE DNS (socks5h) — needs: pip install "requests[socks]"
SOCKS5 = f"socks5h://{USER}:{PASS}@{HOST}:1080"
# Plain HTTP CONNECT proxy — works with a stock requests install
HTTP   = f"http://{USER}:{PASS}@{HOST}:3128"

def proxies_for(proxy_url):
    # The "http"/"https" keys are the scheme of the TARGET url,
    # not the proxy's protocol — both can point at one proxy.
    return {"http": proxy_url, "https": proxy_url}

def check_ip(session, proxy):
    r = session.get(
        "https://api.ipify.org?format=json",
        proxies=proxies_for(proxy),
        timeout=(5, 15),   # (connect, read) seconds
    )
    r.raise_for_status()
    return r.json()["ip"]

# --- Per-session config: pools connections, keeps cookies/headers ---
with requests.Session() as s:
    s.headers.update({"User-Agent": "s4m-example/1.0"})
    print("Exit IP:", check_ip(s, SOCKS5))

# --- Rotate across a list, retrying on failure ---
POOL = [SOCKS5, HTTP]

def fetch(url, retries=3):
    last_err = None
    for attempt in range(1, retries + 1):
        proxy = random.choice(POOL)
        try:
            with requests.Session() as s:
                r = s.get(url, proxies=proxies_for(proxy), timeout=(5, 15))
                r.raise_for_status()
                return r
        except RequestException as e:
            last_err = e
            print(f"[{attempt}/{retries}] {proxy} failed: {e}")
    raise last_err

resp = fetch("https://httpbin.org/ip")
print(resp.json())

Por solicitud, por sesión o global

Por solicitud

Pasa proxies= a cada llamada: requests.get(url, proxies=proxies_for(SOCKS5), timeout=10). La forma más explícita y la más fácil de intercambiar o rotar en una base de llamada por llamada.

Por sesión

Configúralo una vez con session.proxies = proxies_for(SOCKS5). Cada solicitud realizada a través de esa sesión hereda el proxy y reutiliza conexiones TCP, lo que es más rápido que un get() nuevo cada vez.

Global a través del entorno

requests respeta HTTP_PROXY, HTTPS_PROXY y ALL_PROXY. Exporta ALL_PROXY=socks5h://USER:PASS@proxy.s4m.online:1080 y cada solicitud se enruta sin cambios en el código. Usa NO_PROXY para excluir hosts, o trust_env=False en una sesión para ignorar el entorno.

Cosas que confunden a la gente

La autenticación va en la URL

Coloca USER:PASS@ directamente en la URL del proxy y las solicitudes envían las credenciales por ti. Si tu contraseña contiene caracteres @, : o /, codifícalo primero con urllib.parse.quote.

Mantener DNS remoto

socks5 resuelve nombres de host en tu máquina; socks5h los resuelve en el proxy. Usa socks5h cuando el objetivo es mantener tus búsquedas y la IP de origen fuera del radar del objetivo.

Reutilizar una sesión

Una requests.Session agrupa conexiones y persiste cookies, por lo que un estallido de solicitudes a través de un proxy es notablemente más rápido que llamar a requests.get() en frío cada vez.

Deja la verificación de TLS activada

Un proxy solo reenvía tu tráfico; no es razón para establecer verify=False. Mantén la verificación del certificado habilitada para que un intermediario no pueda manipular silenciosamente las respuestas HTTPS.

FAQ

Preguntas, respondidas

¿Los proxies SOCKS5 necesitan un paquete extra?

Sí. requests necesita PySocks para soporte SOCKS: instálalo con pip install "requests[socks]". El punto final HTTP en el puerto 3128 funciona con una instalación estándar de requests y sin dependencias adicionales.

¿Cuál es la diferencia entre socks5 y socks5h?

Se trata de dónde se resuelve el DNS. socks5:// resuelve el nombre de host objetivo en tu propia máquina antes de conectarse; socks5h:// le pide al proxy que lo resuelva. Usa socks5h para evitar filtrar los nombres de host que visitas.

¿Por qué no cambia mi IP de salida cuando la rotación?

Normalmente, el diccionario de proxies no se está aplicando realmente, o una sola sesión está reutilizando una conexión upstream. Confirma que cada solicitud pase por proxies=, construye una nueva sesión por proxy al rotar, e imprime la respuesta de un punto final de eco IP para verificar.

¿Son estas IPs residenciales?

No. Los proxies de s4m son puntos finales SOCKS5 y HTTP de centro de datos, autenticados con un nombre de usuario y contraseña y medidos por gigabyte. La lista de proxies públicos gratuitos es de terceros y no está validada para uso en producción.

¿Cómo evito un proxy muerto en una lista?

Envuelve cada intento en try/except requests.exceptions.RequestException, luego reintenta con el siguiente proxy de tu grupo. El ejemplo ejecutable anterior hace exactamente esto con un pequeño bucle de reintento.

Proxies diseñados para ocultar tu IP de origen

Proxies SOCKS5 y HTTP de centro de datos autenticados, de pago por uso, con una IP personal dedicada opcional. Dirige las solicitudes a proxy.s4m.online y listo.

Las personas encontraron esta página buscando

Frases de búsqueda reales que esta página responde — los enlaces abren la página que las cubre en profundidad.