Python Glossary English

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

urllib.request.AbstractBasicAuthHandler

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

Общая часть Basic-авторизации для сайта и прокси: разбирает вызов авторизации и повторяет запрос с логином и паролем.

Синтаксис

class urllib.request.AbstractBasicAuthHandler(password_mgr=None)

Это примесь: напрямую её не создают, а используют наследников HTTPBasicAuthHandler и ProxyBasicAuthHandler. Basic кодирует 'user:pass' в base64 — это не шифрование, без HTTPS пароль читает любой на пути. На схему, отличную от Basic, например Bearer, обработчик отвечает ValueError, а не HTTPError.

Примеры

import base64, urllib.request
print(issubclass(urllib.request.HTTPBasicAuthHandler,
                 urllib.request.AbstractBasicAuthHandler))  # → True
print(base64.b64decode('dTpw'))  # → b'u:p' — заголовок Basic dTpw раскрывается так
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):
        return reply(req, 401, WWW_Authenticate='Bearer realm="api"')
opener = urllib.request.build_opener(Server, urllib.request.HTTPBasicAuthHandler())
try:
    opener.open('http://example.com/')
except ValueError as e:
    print(str(e)[:42])  # → AbstractBasicAuthHandler does not support

См. также

Частые ошибки

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