urllib2是否支持抢占式身份验证身份验证?

thi*_*one 2 python http urllib2

我正在尝试访问REST API.

我可以使用Curl/REST Client(UI工具),启用抢先身份验证.

但是,使用urllib2,它似乎默认不支持这个,我找不到打开它的方法.

谢谢 :)

tho*_*nic 7

这是一个简单的Preemptive HTTP基本auth处理程序,基于来自的代码urllib2.HTTPBasicAuthHandler.它可以以完全相同的方式使用,除了Authorization标题将添加到具有匹配URL的每个请求.请注意,此处理程序应与a一起使用HTTPPasswordMgrWithDefaultRealm.那是因为WWW-Authenticate自己先发制人,因此没有领域可以回到挑战中.

class PreemptiveBasicAuthHandler(urllib2.BaseHandler):

        def __init__(self, password_mgr=None):
                if password_mgr is None:
                        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
                self.passwd = password_mgr
                self.add_password = self.passwd.add_password

        def http_request(self,req):
                uri = req.get_full_url()
                user, pw = self.passwd.find_user_password(None,uri)
                #logging.debug('ADDING REQUEST HEADER for uri (%s): %s:%s',uri,user,pw)
                if pw is None: return req

                raw = "%s:%s" % (user, pw)
                auth = 'Basic %s' % base64.b64encode(raw).strip()
                req.add_unredirected_header('Authorization', auth)
                return req
Run Code Online (Sandbox Code Playgroud)