Python Glossary English

все Python 3urllib.requestпонятие

urllib.request.HTTPBasicAuthHandler

аутентификация

Отвечает на 401 с WWW-Authenticate: Basic — повторяет запрос с логином и паролем из менеджера паролей.

Синтаксис

urllib.request.HTTPBasicAuthHandler(password_mgr=None)

Первый запрос всегда уходит без пароля, и только 401 запускает повтор — сервер, отвечающий 403 или 404 вместо 401, пароля не получит (тогда нужен HTTPPasswordMgrWithPriorAuth). Если realm в add_password не совпал с серверным, будет HTTPError 401. Без аргумента он создаёт свой пустой менеджер — пароль тогда добавляют через handler.add_password().

Примеры

import email.message, io, urllib.error, urllib.request, urllib.response
def reply(req, code, body=b'', **headers):
    msg = email.message.Message()
    for name, value in headers.items():
        msg[name.replace('_', '-')] = value
    resp = urllib.response.addinfourl(io.BytesIO(body), msg, req.full_url, code)
    resp.msg = 'demo'
    return resp
class Server(urllib.request.BaseHandler):
    handler_order = 100
    def http_open(self, req):
        auth = req.get_header('Authorization')
        print('Authorization:', auth)
        if auth:
            return reply(req, 200, b'ok')
        return reply(req, 401, WWW_Authenticate='Basic realm="api"')
mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
mgr.add_password(None, 'http://example.com/', 'u', 'p')
opener = urllib.request.build_opener(Server, urllib.request.HTTPBasicAuthHandler(mgr))
print(opener.open('http://example.com/secret').read())
# → Authorization: None / Authorization: Basic dTpw / b'ok'

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности