Cada solicitud devuelve 407 Proxy Authentication Required, nada llega al destino y las credenciales parecen correctas en el panel. Es uno de los tickets de soporte más comunes en esta categoría de producto y también uno de los más rápidos de resolver, porque el número de cosas que pueden producir un 407 es reducido y se pueden descartar en un orden fijo.
A continuación se explica qué significa realmente este código de estado, las causas que merece la pena comprobar, el orden en el que comprobarlas y los errores específicos del cliente que producen un 407 incluso cuando las credenciales son correctas.
Qué es realmente un 407
Un 407 proviene del proxy, no del sitio al que intentas llegar. Es la forma que tiene el proxy de decir que la solicitud llegó sin credenciales aceptables, y es el equivalente a nivel de proxy de un 401 procedente de un servidor de origen. Esta distinción importa para la depuración: un 407 significa que tu tráfico llegó a la puerta de enlace y esta lo rechazó. La conectividad está bien. La autenticación no.
También significa que el sitio de destino no tiene ninguna implicación. Si estás recibiendo 407, nada de lo que cambies en cabeceras, user agents, renderizado o ritmo de peticiones ayudará, porque tu solicitud nunca salió del proxy.
Las tres causas que conviene comprobar primero
En una puerta de enlace donde la segmentación se expresa en el nombre de usuario, casi todos los 407 se deben a una de estas tres cosas.
Las credenciales son incorrectas. Un error tipográfico, un carácter de espacio en blanco perdido copiado de un panel, o credenciales de un producto diferente. Las credenciales de proxy normalmente no son las mismas que el inicio de sesión de tu cuenta, lo cual es una confusión sorprendentemente habitual.
Una etiqueta (flag) en el nombre de usuario extendido está mal formada. Esta es la causa que se pasa por alto, y es específica de las puertas de enlace que codifican la segmentación en el nombre de usuario. Si tu nombre de usuario incluye etiquetas de país, ciudad, sesión o TTL, un valor no reconocido hace que todo el nombre de usuario sea imposible de analizar, y la puerta de enlace lo rechaza como un fallo de autenticación en lugar de como un error de segmentación. Un código de país mal escrito, un slug de ciudad en un formato incorrecto, un identificador de sesión con caracteres no permitidos, o un ttl sin un sid que lo acompañe, todos caen en este caso. Las credenciales son perfectas; la cadena del nombre de usuario no lo es.
Se rotó la contraseña. Si alguien la regeneró en el panel, todos los clientes que aún tengan el valor antiguo devolverán 407 hasta que se actualicen. Este es el caso clásico en el que funciona en una máquina y falla en otra.
El orden de diagnóstico
Recorre esta lista y detente cuando funcione, porque el paso que lo soluciona identifica la causa.
Uno: elimina todas las etiquetas y prueba las credenciales sin adornos. Este único paso separa un problema de credenciales de un problema de etiquetas, y siempre debe ser el primero.
# bare username, no targeting flags at all
curl -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
Si esto funciona, tus credenciales están bien y el fallo está en las etiquetas. Si sigue devolviendo 407, las propias credenciales son incorrectas y ninguna corrección de etiquetas ayudará.
Dos: añade las etiquetas de nuevo, una por una. Primero el país, luego la ciudad o el ASN, y después la sesión y el TTL. La etiqueta que reintroduce el 407 es la mal formada, y ahora sabes exactamente qué valor comprobar.
curl -x customer-USERNAME-country-us:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
curl -x customer-USERNAME-country-us-city-new_york:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
curl -x customer-USERNAME-country-us-city-new_york-sid-abc123:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
Presta atención a los formatos: los códigos de país son códigos ISO de dos letras, por lo que uk es un error habitual en el que gb es lo correcto. Los slugs de ciudad usan guiones bajos en lugar de espacios o guiones, como en new_york. Y ttl solo es válido junto a sid, por lo que un TTL por sí solo no es válido. La sintaxis completa está en la documentación de gateway y autenticación, y las opciones de segmentación se tratan en segmentación a nivel de ciudad y segmentación por ASN.
Tres: vuelve a copiar la contraseña del panel. Si las credenciales sin adornos fallaron en el paso uno, toma la contraseña directamente del panel en lugar de tus notas o un archivo de configuración, y comprueba específicamente si hay un espacio final, una comilla tipográfica procedente de un documento o un pegado truncado.
Cuatro: propaga el valor a todas partes. Si funciona en local pero no en producción, tienes una copia obsoleta en una variable de entorno, un gestor de secretos, una imagen de contenedor o una configuración de CI. Esto es un problema de despliegue, no un problema de proxy.
Errores que parecen un 407 pero no lo son
Distinguirlos ahorra mucho esfuerzo desperdiciado, porque cada uno tiene una solución diferente.
Un 502 en esta puerta de enlace significa que ninguna dirección coincidió con tu filtro en ese momento. Eso es un problema de segmentación, no de autenticación: tus credenciales fueron aceptadas y luego no había nada disponible para la combinación que solicitaste. Amplía el filtro, baja de ciudad a país, o relaja una etiqueta de coincidencia estricta.
Un 509 significa que el ancho de banda del plan está agotado con el exceso desactivado. La autenticación funcionó; te has quedado sin cuota. Encontrarás orientación relacionada sobre dimensionamiento en cómo estimar el ancho de banda mensual.
Connection refused significa que nunca llegaste a la puerta de enlace, normalmente porque apuntas a un host antiguo basado en puertos en lugar del endpoint actual, o porque la salida desde tu red está bloqueada. Prueba la conectividad básica con nc -vz p.shifter.io 443 antes de asumir un problema de autenticación.
Un 403 o una página de desafío del destino significa que la autenticación funcionó perfectamente y el sitio te rechazó, lo cual es un problema completamente distinto abordado en cómo evitar bloqueos.
Errores específicos del cliente que producen un 407
A veces las credenciales y las etiquetas son correctas y el fallo está en el cliente.
Caracteres especiales en la contraseña. Si la contraseña contiene caracteres que tienen significado en una URL, @, :, #, / o %, incrustarla directamente en una URL de proxy rompe el análisis y las credenciales llegan corrompidas. Codifícala con percent-encoding.
import requests
from urllib.parse import quote
user = "customer-USERNAME-country-us"
pwd = quote("p@ss:word/123", safe="") # encode before embedding
PROXY = f"http://{user}:{pwd}@p.shifter.io:443"
r = requests.get("https://ipinfo.io/json",
proxies={"http": PROXY, "https": PROXY}, timeout=15)
print(r.status_code, r.text[:120])
Confundir la autenticación de proxy con la autenticación de destino. curl -U establece las credenciales de proxy; -u establece las credenciales para el sitio de destino. Enviar tus credenciales de proxy como una cabecera Authorization no hace nada, porque la autenticación de proxy viaja en Proxy-Authorization, y la mayoría de los clientes la configuran automáticamente cuando las credenciales están en la URL del proxy.
Credenciales que se pierden en HTTPS. Algunas configuraciones de cliente establecen el proxy solo para HTTP, de modo que las solicitudes simples se autentican y las de HTTPS no. Configura ambas entradas, como en el ejemplo de Python anterior.
Variables de entorno que no son lo que crees. HTTP_PROXY y HTTPS_PROXY establecidas en un perfil de shell, un Dockerfile o un ejecutor de CI pueden sobrescribir silenciosamente lo que pasa tu código, de modo que una aplicación puede autenticarse contra una cadena de proxy completamente distinta a la de tu código fuente. Imprime la configuración de proxy efectiva al depurar en lugar de confiar en el código.
Una biblioteca que no envía autenticación de proxy preventiva. Algunos clientes HTTP esperan a que se les desafíe antes de enviar credenciales y gestionan mal el desafío, particularmente con ciertas configuraciones de tunneling. Si un curl sin adornos funciona y tu aplicación no, la diferencia está en el cliente, no en la puerta de enlace. Las configuraciones que funcionan para las pilas más comunes están en uso de proxies residenciales con Python.
Gestión del 407 en código de producción
Una nota operativa: un 407 es un error terminal, no transitorio. Reintentarlo no sirve de nada, porque las credenciales serán igualmente incorrectas en el siguiente intento, y un bucle de reintentos contra un fallo de autenticación simplemente consume ancho de banda y puede parecer, visto desde fuera, un patrón de credential stuffing. Clasifícalo como terminal, falla de forma visible y genera una alerta, que es la disciplina de clasificación que se describe en reintentos y backoff.
La rotación de credenciales merece un plan de despliegue en lugar de un simple clic en el panel, ya que todos los clientes que tengan el valor antiguo empezarán a fallar en el momento de la rotación. Actualiza primero el almacén de secretos, despliega en los clientes y después rota.
En resumen
Un 407 significa que tu solicitud llegó a la puerta de enlace y esta rechazó las credenciales, por lo que el sitio de destino es irrelevante y la conectividad está demostrada. Prueba primero las credenciales sin adornos y sin etiquetas, porque este único paso divide el problema en dos mitades, y luego añade las etiquetas de nuevo una por una para encontrar la que está mal formada, recordando que un código de país incorrecto o un TTL sin sesión hace que todo el nombre de usuario sea imposible de analizar. Vuelve a copiar la contraseña del panel si la prueba sin adornos falló, y comprueba si hay valores obsoletos en variables de entorno y almacenes de secretos si funciona en un sitio y no en otro. Descarta los casos que se le parecen: el 502 es un filtro vacío, el 509 es ancho de banda, connection refused es el host equivocado, y un 403 del sitio no es en absoluto un problema de autenticación. Y nunca reintentes un 407.
La referencia de sintaxis completa está en la documentación de gateway y autenticación, y el producto en sí son los proxies residenciales, donde las mismas credenciales funcionan en todos los países, ciudades y modos de sesión con precios por GB.