2009-04-06 34 views
15

Whats là python urllib equivallent củaHTTP Authentication trong Python

curl -u username:password status="abcd" http://example.com/update.json 

Tôi đã làm điều này:

handle = urllib2.Request(url) 
authheader = "Basic %s" % base64.encodestring('%s:%s' % (username, password)) 
handle.add_header("Authorization", authheader) 

Có/cách đơn giản hơn?

Trả lời

20

Bí quyết là tạo trình quản lý mật khẩu và sau đó báo cho bạn biết về nó. Thông thường, bạn sẽ không quan tâm đến lĩnh vực xác thực, chỉ là phần lưu trữ/url. Ví dụ: như sau:

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
top_level_url = "http://example.com/" 
password_mgr.add_password(None, top_level_url, 'user', 'password') 
handler = urllib2.HTTPBasicAuthHandler(password_mgr) 
opener = urllib2.build_opener(urllib2.HTTPHandler, handler) 
request = urllib2.Request(url) 

Sẽ đặt tên người dùng và mật khẩu cho mỗi URL bắt đầu bằng top_level_url. Các tùy chọn khác là chỉ định tên máy chủ hoặc URL hoàn chỉnh hơn tại đây.

Tài liệu hay mô tả tài liệu này và hơn thế nữa là http://www.voidspace.org.uk/python/articles/urllib2.shtml#id6.

+2

thế nào là này đơn giản hơn ví dụ ban đầu? – ibz

+1

ibz: Tôi không bao giờ tuyên bố nó đơn giản hơn, nhưng trong mẫu mã của tôi, bạn không phải thao tác thủ công các chuỗi tên người dùng và mật khẩu. Ngoài ra, bạn nhận được tất cả các loại lợi ích từ nó, chẳng hạn như mã tìm hiểu xem có thực sự gửi thông tin xác thực đến máy chủ hay không, dựa trên URL. Bạn có thể hoặc không cần tất cả điều này; chọn một giải pháp phù hợp với bạn. – Ivo

+0

Tôi tìm thấy nội dung của người vượt qua không hoạt động. Thêm tiêu đề người dùng/vượt qua base64 theo câu trả lời này http://stackoverflow.com/a/18592800/623159 đã hoạt động. Truy cập URL jenkins như http: // /job//lastCompletedBuild/testR‌ eport/api/python – gaoithe

6

Có, hãy xem urllib2.HTTP*AuthHandlers.

Ví dụ từ các tài liệu:

import urllib2 
# Create an OpenerDirector with support for Basic HTTP Authentication... 
auth_handler = urllib2.HTTPBasicAuthHandler() 
auth_handler.add_password(realm='PDQ Application', 
          uri='https://mahler:8092/site-updates.py', 
          user='klem', 
          passwd='kadidd!ehopper') 
opener = urllib2.build_opener(auth_handler) 
# ...and install it globally so it can be used with urlopen. 
urllib2.install_opener(opener) 
urllib2.urlopen('http://www.example.com/login.html') 
Các vấn đề liên quan