Frage

Google Mail hat diese süße Sache, um ein Atom -Feed zu bekommen:

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

Wenn Sie dies in einem Browser tun, authentifiziert es und leitet Sie weiter. Aber in Python funktioniert zumindest das, was ich versuche, nicht richtig.

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

Anstatt richtig weiterzuleiten, tut es dies:

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

Das ist schlecht! Ich sollte den Benutzernamen und das Passwort nicht wieder eingeben müssen !! Wie kann ich es in Python nur automatisch vorwärts machen, wie es in meinem Webbrowser der Fall ist, damit ich den Feed-Inhalt ohne alle BS erhalten kann?

War es hilfreich?

Lösung

Sie können den httpbasicauthhandler verwenden, ich habe Folgendes ausprobiert und es hat funktioniert:

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top