36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
import urllib
|
|
import base64
|
|
import logging
|
|
|
|
logg = logging.getLogger(__name__)
|
|
|
|
|
|
# THANKS to https://stackoverflow.com/questions/2407126/python-urllib2-basic-auth-problem
|
|
class PreemptiveBasicAuthHandler(urllib.request.HTTPBasicAuthHandler):
|
|
"""Handler for basic auth urllib callback.
|
|
|
|
:param req: Request payload
|
|
:type req: str
|
|
:return: Request payload
|
|
:rtype: str
|
|
"""
|
|
|
|
def http_request(self, req):
|
|
url = req.get_full_url()
|
|
realm = None
|
|
user, pw = self.passwd.find_user_password(realm, url)
|
|
|
|
if pw:
|
|
raw = "%s:%s" % (user, pw)
|
|
raw_bytes = raw.encode('utf-8')
|
|
auth_base_bytes = base64.encodebytes(raw_bytes)
|
|
auth_base = auth_base_bytes.decode('utf-8')
|
|
auth_base_clean = auth_base.replace('\n', '').strip()
|
|
auth = 'Basic %s' % auth_base_clean
|
|
req.add_unredirected_header(self.auth_header, auth)
|
|
logg.debug('head {}'.format(req.header_items()))
|
|
|
|
return req
|
|
|
|
https_request = http_request
|