身份认证
许多 web 服务都需要身份认证,并且也有多种不同的认证类型。以下,我们会从简单到复杂概述 Requests 中可用的几种身份认证形式。
许多要求身份认证的web服务都接受 HTTP Basic Auth。这是最简单的一种身份认证,并且 Requests对这种认证方式的支持是直接开箱即可用。
以 HTTP Basic Auth 发送请求非常简单:
事实上,HTTP Basic Auth 如此常见,Requests 就提供了一种简写的使用方式:
- >>> requests.get('https://api.github.com/user', auth=('user', 'pass'))
- <Response [200]>
如果认证方法没有收到 auth
参数,Requests 将试图从用户的 netrc文件中获取 URL 的 hostname 需要的认证身份。The netrc file overrides raw HTTP authentication headersset with headers=.
如果找到了 hostname 对应的身份,就会以 HTTP Basic Auth 的形式发送请求。
摘要式身份认证
另一种非常流行的 HTTP 身份认证形式是摘要式身份认证,Requests 对它的支持也是开箱即可用的:
Oauth 是一种常见的 Web API 认证方式。 库可以让 Requests 用户简单地创建 OAuth 认证的请求:
- ::
- >>> import requests
- >>> from requests_oauthlib import OAuth1
- <Response [200]>
OAuth 2 与 OpenID 连接认证
requests-oauthlib
库还可以处理 OAuth 2,OAuth 2 是 OpenID 连接的基础机制。请查看 requests-oauthlib OAuth2 documentation 文档以了解 OAuth 2 的各种认证管理流程:
Requests 的设计允许其他形式的身份认证用简易的方式插入其中。开源社区的成员时常为更复杂或不那么常用的身份认证形式编写认证处理插件。其中一些最优秀的已被收集在 页面中,包括:
新的身份认证形式
如果你找不到所需要的身份认证形式的一个良好实现,你也可以自己实现它。Requests 非常易于添加你自己的身份认证形式。
要想自己实现,就从 继承一个子类,并实现 call()
方法:
你可以在 页面的 auth.py
文件中找到更多示例。