Cómo ignorar “Introducir nombre de usuario para el servidor proxy de acceso privado” del sistema?
Pregunta
Estoy usando urllib.urlopen con algunos servidores proxy HTTP y, a veces (probablemente cuando requieren autorización) me sale el siguiente mensaje impreso en la consola:
Enter username for Private Proxy Access (country) at xxx.xxx.xxx.xxx:xxxx
¿Cómo puedo aumentar la excepción de falta tal cosa sucede?
Aquí está el ejemplo:
from urllib import urlopen
p = '64.79.209.238:36867'
print urlopen('http://google.com', proxies={'http': 'http://'+p})
En caso de que el proxy mencionado muere demasiado pronto, he aquí algunos reemplazos 64.79.197.36:43444
, 64.79.209.203:34968
, 64.79.197.36:43444
, 209.59.207.197:3438
Solución
Es necesario sobrescribir el método FancyURLopener.prompt_user_passwd
:
class AuthorizationRequired(Exception):
pass
class MyURLOpener(urllib.FancyURLopener):
def prompt_user_passwd(self, host, realm):
raise AuthorizationRequired()
opener = MyURLOpener(proxies={'http': 'http://'+p})
fp = opener.open(url)
Otros consejos
urllib.urlencode
no hace nunca de impresión ese mensaje. Ese método nunca se golpea la red en primer lugar. Su problema está en otra parte.
Creo que se está ejecutando algún otro demonio en segundo plano que imprime el mensaje.
Por favor proporcionar el código exacto reproducible y mensaje. Ejemplo de proxy que desencadena el mensaje también sería bueno.
Adapté código Denis' un poco a esto:
import urllib
urllib.FancyURLopener.prompt_user_passwd = lambda *a, **k: (None, None)
Se desactivará la solicitud de contraseña por completo