是否有python http-client可以自动对几种身份验证类型执行身份验证?

我目前正在使用urllib2或curl对不同的Trac,Jira,Twiki和Media Wiki网站执行身份验证,以请求诸如活动用户之类的信息.

现在,根据具体实例上的设置,我目前需要指定如何执行身份验证(例如,trac使用基本身份验证或摘要身份验证方案).

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

解决方法:

Python请求不会自动处理身份验证方案,但提供了一个更简单的界面来处理Basic和Digest.

检查http://www.python-requests.org/en/latest/user/authentication/以获取代码示例.

以下代码尝试一次获取该网址以获取身份验证方案,然后使用正确的Auth实现重试该网址:

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用户名密码进行测试.

上一篇:React Native运行npm start卡住了?


下一篇:Android 几种异步方式,解决主线程中遇到的卡顿