身份验证¶
本文档讨论如何使用 Requests 中的各种身份验证。
许多 Web 服务需要身份验证,并且有许多不同的类型。下面,我们概述了 Requests 中可用的各种身份验证形式,从简单到复杂。
基本身份验证¶
许多需要身份验证的 Web 服务接受 HTTP 基本身份验证。这是最简单的类型,Requests 直接支持它。
使用 HTTP 基本身份验证进行请求非常简单
>>> from requests.auth import HTTPBasicAuth
>>> basic = HTTPBasicAuth('user', 'pass')
>>> requests.get('https://httpbin.org/basic-auth/user/pass', auth=basic)
<Response [200]>
事实上,HTTP 基本身份验证非常常见,以至于 Requests 提供了一个方便的速记方式来使用它
>>> requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
<Response [200]>
像这样以元组提供凭据与上面的 HTTPBasicAuth
示例完全相同。
netrc 身份验证¶
如果未通过 auth
参数提供身份验证方法,Requests 将尝试从用户的 netrc 文件中获取 URL 主机名的身份验证凭据。netrc 文件将覆盖使用 headers= 设置的原始 HTTP 身份验证标头。
如果找到了主机名的凭据,则使用 HTTP 基本身份验证发送请求。
摘要身份验证¶
另一种非常流行的 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 身份验证¶
OAuth 是几种 Web API 的常见身份验证形式。requests-oauthlib
库允许 Requests 用户轻松地进行 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 的示例和文档,请参阅 GitHub 上的 requests_oauthlib 存储库
OAuth 2 和 OpenID Connect 身份验证¶
requests-oauthlib
库还处理 OAuth 2,这是支持 OpenID Connect 的身份验证机制。有关各种 OAuth 2 凭据管理流程的详细信息,请参阅 requests-oauthlib OAuth2 文档
其他身份验证¶
Requests 旨在允许轻松快速地插入其他形式的身份验证。开源社区的成员经常为更复杂或不常用的身份验证形式编写身份验证处理程序。一些最好的内容已汇集在 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 组织 和 auth.py
文件中找到。