我目前正在使用urllib2或curl对不同的Trac,Jira,Twiki和Media Wiki网站进行身份验证,以请求活跃用户等信息。
现在,根据特定实例的设置,我当前需要指定如何执行身份验证(例如,trac使用Basic或Digest身份验证方案)。
是否有(python)库或一段代码自动识别服务器的auth方案并执行给定的URL,用户名和密码以消除此服务器特定设置作为常量错误源?
答案 0 :(得分:3)
Python请求不会自动处理身份验证方案,但提供了一个更简单的接口来处理Basic和Digest。
检查http://www.python-requests.org/en/latest/user/authentication/代码示例。
下面的代码尝试获取一次获取身份验证方案的url,然后使用正确的Auth实现重试url:
import requests
import sys
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
AUTH_MAP = {
'basic': HTTPBasicAuth,
'digest': HTTPDigestAuth,
}
def auth_get(url, *args, **kwargs):
r = requests.get(url)
if r.status_code != 401:
return r
auth_scheme = r.headers['WWW-Authenticate'].split(' ')[0]
auth = AUTH_MAP.get(auth_scheme.lower())
if not auth:
raise ValueError('Unknown authentication scheme')
r = requests.get(url, auth=auth(*args, **kwargs))
return r
if __name__ == '__main__':
print auth_get(*sys.argv[1:])
使用python test_request.py username password
进行测试。