如何使用Python自动登录Gmail Atom Feed?

10

Gmail有一个很棒的功能,可以获取Atom Feed:

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

现在,当你在浏览器中执行此操作时,它会进行身份验证并将你转发。但在Python中,至少我正在尝试的方式不正确。

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

它没有正确地进行转发,而是出现了这种情况:

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

这很糟糕!我不应该再次输入用户名和密码!!如何使Python自动转发,就像我的Web浏览器一样,这样我就可以获取源内容而不需要所有的冗杂信息?

1个回答

13

你可以使用HTTPBasicAuthHandler,我尝试了以下内容并且能够工作:

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()

3
我收到了“urllib2.HTTPError: HTTP Error 401: basic auth failed”的错误,尽管我确信我的用户名和密码是正确的。还有其他人遇到这个问题吗? - Chase Roberts
没关系,只有在我尝试从服务器运行代码时才会出现问题。在本地机器上运行时一切正常。 - Chase Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接