Cómo ignorar “Introducir nombre de usuario para el servidor proxy de acceso privado” del sistema?

StackOverflow https://stackoverflow.com/questions/1741360

  •  20-09-2019
  •  | 
  •  

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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top