В этом разделе документации рассматриваются вопросы использования с Requests различных видов аутентификации.

Многие веб-сервисы для работы с ними требуют предварительной аутентификации при этом существуют достаточно большое число их типов. Ниже, в данном руководстве мы опишем самые основные способы аутентификации, доступные с Requests, начиная от простых и заканчивая самыми сложными.

Базовая аутентификация Basic Authentication

Большое число веб-сервисов, требующих аутентификации, используют HTTP Basic Auth. Это самый простой тип аутентификации, и Requests поддерживает его по умолчанию, как говорится, «из коробки».

Отправлять запросы с использованием HTTP Basic Auth очень просто:

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>

На самом деле HTTP Basic Auth настолько распространен, что Requests предоставляет для его использования более короткую форму записи:

>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
<Response [200]>

Как видим учетные данные пользователя передаются в кортеже, структура которого аналогична параметрам передаваемым в метод HTTPBasicAuth из примера выше.

Аутентификация с использованием файла netrc

Если в аргументе метода запроса auth не указан способ аутентификации, то Requests пытается самостоятельно получить учетные данные пользователя, соответствующие определенному URL адресу хоста, из файла netrc. Данные из файла netrc переопределяют заголовки HTTP аутентификации, заданные в параметре headers= у вызываемого метода запроса.

Если учетные данные для указанного хоста найдены, то по умолчанию запрос отправляется с использованием HTTP Basic Auth аутентификации.

Дайджест-аутентификация Digest Authentication

Еще одним популярным способом HTTP аутентификации является дайджест-аутентификация, и библиотека Requests также поддерживает ее «из коробки»:

>>> from requests.auth import HTTPDigestAuth
>>> url = 'https://httpbin.org/digest-auth/auth/user/pass'
>>> requests.get(url, auth=HTTPDigestAuth('user', 'pass'))
<Response [200]>

OAuth 1 Аутентификация

Достаточно широко распространен для некоторых веб API такой способ аутентификации, как OAuth. Расширение исходной библиотеки requests-oauthlib позволяет пользователям легко отправлять запросы с OAuth 1 проверкой подлинности запросов:

>>> import requests
>>> from requests_oauthlib import OAuth1

>>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
>>> auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')

>>> requests.get(url, auth=auth)
<Response [200]>

Для получения дополнительной информации о том, как работает поток данных с OAuth, посетите официальный сайт OAuth. Для ознакомления с примерами и документацией пакета requests-oauthlib, перейдите по ссылке requests_oauthlib, где расположен его репозиторий на GitHub.

OAuth 2 и OpenID Connect аутентификация

Расширение исходной библиотека requests-oauthlib позволяет также работать со следующими механизмами аутентификации: OAuth 2 и OpenID Connect. Ознакомьтесь с документацией requests-oauthlib OAuth 2 , а также с различиями ее использования при управлении потоками данных:

Другие способы аутентификации

Библиотека Requests создавалась для быстрого и простого подключения различных, и в том числе пользовательских, способов аутентификации. Члены open-source сообщества часто пишут свои инструменты аутентификации данных для более сложных или менее часто используемых способов аутентификации. Некоторые из лучших были собраны в рамках команды работающей над Requests , в том числе:

Если вы хотите использовать какой-либо из представленных способов аутентификации, то перейдите по одной из этих ссылок на страницу GitHub и далее следуйте инструкциям.

Новые (пользовательские) способы аутентификации

Если вы не можете определиться с наиболее подходящим для реализации вашего проекта способом аутентификации, то можете реализовать ее самостоятельно. Requests позволяет легко разрабатывать свои собственные способы аутентификации.

Для этого просто создайте подкласс AuthBase, а затем реализовать самостоятельно метод __call __():

>>> import requests
>>> class MyAuth(requests.auth.AuthBase):
...     def __call__(self, r):
...         # Implement my authentication
...         return r
...
>>> url = 'https://httpbin.org/get'
>>> requests.get(url, auth=MyAuth())
<Response [200]>

И так ваш обработчик для аутентификации будет подключен к запросу и затем будет вызван во время формирования запроса перед его непосредственной отправкой. И далее метод __call__() будет реализовывать вашу логику процесса аутентификации. Некоторые способы аутентификации также добавляют хуки для обеспечения дополнительной функциональности. Примеры использования своего способа аутентификации вы можете по ссылке Requests organization, а также ознакомившись с исходным кодов файла auth.py.