2009-11-21 28 views
10

Gmail có điều ngọt ngào này xảy ra để có được một nguồn cấp nguyên tử:Làm thế nào để tự động đăng nhập vào nguồn cấp dữ liệu nguyên tử gmail bằng Python?

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

Bây giờ khi bạn làm điều này trong một trình duyệt, nó xác nhận và chuyển tiếp bạn. Nhưng trong Python, ít nhất là những gì tôi đang cố gắng, không hoạt động đúng.

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

Thay vì chuyển tiếp một cách chính xác, nó làm điều này:

>>> 
https://user:[email protected]/gmail/feed/atom 
Enter username for New mail feed at mail.google.com: 

Đây là BAD! Tôi không cần phải nhập tên người dùng và mật khẩu nữa !! Làm thế nào tôi có thể làm cho nó chỉ tự động chuyển tiếp trong python như nó trong trình duyệt web của tôi, vì vậy tôi có thể nhận được các nội dung nguồn cấp dữ liệu mà không cần tất cả BS?

Trả lời

13

Bạn có thể sử dụng HTTPBasicAuthHandler, tôi đã thử sau đây và nó làm việc:

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='%[email protected]' % 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() 
+2

tôi nhận được 'urllib2.HTTPError: Lỗi HTTP 401: auth cơ bản thất bại', mặc dù tôi là dương tính tôi có tên người dùng và mật khẩu chính xác. có ai khác có vấn đề tương tự không? –

+0

Nevermind. Nó chỉ là một vấn đề khi tôi cố gắng chạy mã từ máy chủ của tôi. Khi làm nó trên máy địa phương của tôi nó hoạt động tốt. –

Các vấn đề liên quan