Respuesta rápida
¿Qué significa Cannot connect to proxy (ProxyError) con un proxy?
'No se puede conectar al proxy' es un error contenedor: requests y urllib3 de Python colocan la razón real dentro. Lee la causa más interna. 'Conexión rechazada' o un timeout significa un problema en host, puerto o red; 'Fallo al resolver' significa DNS; 'Fallo en la conexión del túnel: 407' significa credenciales. Con CrawlRelay, cada uno tiene una solución en una línea.
Cannot connect to proxy (ProxyError) en pocas palabras
| Error | Cannot connect to proxy (ProxyError) |
|---|---|
| Tipo | Error en la librería cliente (Python, Node.js) |
| Enviado por | Tu cliente HTTP, antes o mientras habla con el proxy |
| Definido en | Library error; read the nested cause for the real reason |
| ¿Reintentar? | Depende de la causa anidada |
| Primera comprobación | Lee la excepción más interna: rechazado, timeout, resolución de nombre o un código de estado |
¿Qué significa Cannot connect to proxy (ProxyError)?
urllib3 lanza un ProxyError por cada fallo que involucra al proxy, y requests lo pasa. La información útil está en la excepción anidada, que el traceback imprime al final de una línea larga.
Los clientes Node.js se comportan distinto: reportan directamente el error de socket, como ECONNREFUSED o ETIMEDOUT, a menudo sin decir que la dirección era la del proxy.
¿Cómo se ve 'Cannot connect to proxy' en Python, curl, Node.js y navegadores?
El mismo fallo se muestra de forma diferente en cada herramienta. Estos son los mensajes que debes buscar en tus registros:
- Rechazado:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)dentro delProxyError - Credenciales:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - Error de puerta de enlace:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUToENOTFOUND, seguido por la dirección del proxy
¿Qué causa 'Cannot connect to proxy'?
Lo más probable al principio:
- Host o puerto incorrectos en la URL del proxy.
- Falta el esquema:
host:portsinhttp://se interpreta de forma inesperada en algunas librerías. - Tráfico saliente bloqueado en tu red o servidor.
- Errores de credenciales o puerta de enlace que aparecen en el paso CONNECT, envueltos en la misma excepción.
- Variables de entorno como
HTTPS_PROXYque apuntan a un proxy viejo y sobrescriben tu código.
¿Cómo diagnostico 'Cannot connect to proxy' paso a paso?
- Imprime la excepción completa y lee la última causa anidada.
- Imprime
requests.utils.get_environ_proxies(url)o las variablesHTTP_PROXY,HTTPS_PROXYyNO_PROXYpara ver qué más está configurado. - Ejecuta la prueba curl abajo desde la misma máquina.
- Empareja la causa con la lista de soluciones abajo.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL¿Cómo soluciono 'Cannot connect to proxy'?
- Rechazado o tiempo agotado: corrige host y puerto, o abre el tráfico saliente a la puerta de enlace.
- Fallo al resolver: revisa DNS en la máquina; prueba el host con
nslookup. - 407: corrige y codifica URL las credenciales. Véase 407 Proxy Authentication Required.
- 502 o 504: reintenta con una salida nueva. Véase 502 y 504.
- Proxy de entorno no deseado: configura
session.trust_env = Falseen requests, o limpia las variables.
from urllib.parse import quote
import requests
user = "USERNAME-country-us"
password = "p@ss:word/1" # example containing special characters
# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy} # http:// for both keys
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)¿Debo reintentar después de 'Cannot connect to proxy'?
Reintenta sólo las causas a nivel de red que pueden cambiar: timeouts y errores de puerta de enlace como 502 o 504. Una conexión rechazada, un fallo DNS o un 407 se repetirán hasta que cambies la configuración, así que hazlos fatales en tu manejo de errores.
¿Cómo se aplica Cannot connect to proxy (ProxyError) a CrawlRelay?
Para CrawlRelay, la URL del proxy es http://USERNAME:PASSWORD@ seguida del host y puerto HTTP de la puerta de enlace listados abajo, para destinos HTTP y HTTPS por igual. Usa la misma URL http:// para las claves http y https en requests: el esquema especifica el protocolo hablado con el proxy, no con el sitio web.
Gateway: gw.crawlrelay.com, puerto 7777 (HTTP, HTTPS a través de CONNECT) y puerto 7778 (SOCKS5). Formato de usuario: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Relacionado: SSL: WRONG_VERSION_NUMBER · 407 · Guía Python.
Cannot connect to proxy (ProxyError): preguntas que hacen los desarrolladores
¿Qué significa 'Max retries exceeded with url' con un proxy?
Significa que urllib3 se rindió tras su límite de reintentos, y la razón real sigue en la parte 'Caused by' del mensaje. Con un proxy, esa parte suele ser un ProxyError con una causa anidada: conexión rechazada, timeout, fallo en resolución de nombre o estado de túnel como 407.
¿Por qué requests usa un proxy que no configuré?
requests lee las variables de entorno HTTP_PROXY, HTTPS_PROXY y NO_PROXY por defecto, y en Windows también lee los ajustes del proxy del sistema. Un valor remanente sobrescribe tus expectativas. Configura session.trust_env = False, o pasa los proxies explícitamente en cada petición.
¿Debo escribir http:// o https:// delante de la dirección del proxy?
Escribe http:// para un proxy HTTP, incluso cuando el sitio use HTTPS. El esquema describe cómo tu cliente habla con el proxy. Escribir https:// hace que las versiones nuevas de urllib3 inicien TLS con el proxy, lo que falla en un puerto de proxy HTTP simple con un error SSL.
Otros errores de proxy en esta referencia
Códigos de estado HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Errores de navegador y cliente
Errores de conexión y TLS
Proxies residenciales con documentación que cubre los casos de fallo
CrawlRelay proxies residenciales de 0,50 US$/GB, tráfico que nunca expira.