Pregunta

Gmail tiene esta dulce cosa para obtener un alimento de átomo:

def gmail_url(user, pwd):
    return "https://"+str(user)+":"+str(pwd)+"@gmail.google.com/gmail/feed/atom"

Ahora, cuando haces esto en un navegador, te autentica y te envía. Pero en Python, al menos lo que estoy intentando, no funciona bien.

url = gmail_url(settings.USER, settings.PASS)
print url
opener = urllib.FancyURLopener()
f = opener.open(url)
print f.read()

En lugar de reenviar correctamente, está haciendo esto:

>>> 
https://user:pass@gmail.google.com/gmail/feed/atom
Enter username for New mail feed at mail.google.com: 

¡Esto es malo! ¡No debería tener que escribir el nombre de usuario y la contraseña nuevamente! ¿Cómo puedo hacerlo solo avance automático en Python como lo hace en mi navegador web, para que pueda obtener el contenido de la alimentación sin todas las BS?

¿Fue útil?

Solución

Puedes usar el httpbasicauthhandler, probé lo siguiente y funcionó:

import urllib2

def get_unread_msgs(user, passwd):
    auth_handler = urllib2.HTTPBasicAuthHandler()
    auth_handler.add_password(
        realm='New mail feed',
        uri='https://mail.google.com',
        user='%s@gmail.com' % user,
        passwd=passwd
    )
    opener = urllib2.build_opener(auth_handler)
    urllib2.install_opener(opener)
    feed = urllib2.urlopen('https://mail.google.com/mail/feed/atom')
    return feed.read()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top