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 scheme | DNS resolved by | Port | Install |
|---|---|---|---|
socks5h:// | Proxy (remote) | 1080 | requests[socks] |
socks5:// | Your machine (local) | 1080 | requests[socks] |
http:// | Proxy | 3128 | Stock 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.
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.
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
- cómo usar proxies con solicitudes de Python
- ¿qué es autenticación de proxy?
- cómo construir tu propio servidor proxy en un VPS (3proxy / Dante)
- autenticación de proxy
- usando las variables de entorno HTTP_PROXY / HTTPS_PROXY
- proxy para scraping
- mejor openvpn 2026
- interruptor de apagado de VPN explicado
- configuración de proxy Puppeteer con autenticación
- lista de proxies gratuitos por país
- interruptor de apagado de VPN
- mejor interruptor de apagado de VPN 2026
Frases de búsqueda reales que esta página responde — los enlaces abren la página que las cubre en profundidad.