3

我目前正在使用 urllib2 或 curl 对不同的 Trac、Jira、Twiki 和 Media Wiki 站点执行身份验证,以请求活动用户等信息。

现在取决于特定实例上的设置,我当前需要指定如何执行身份验证(例如,trac 使用 Basic 或 Digest 身份验证方案)。

是否有一个(python)库或一段代码可以自动识别服务器的身份验证方案并执行给定的 url、用户名和密码,以消除这个服务器特定的设置作为一个恒定的错误源?

4

1 回答 1

3

Python Requests 不会自动处理身份验证方案,但提供了一个更简单的接口来处理 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.

于 2013-10-17T12:50:40.397 回答