7. 认证 —— Requests中文文档

本文档讨论了如何在Requests中使用各种身份验证。
许多WEB服务需要身份验证,并且有许多不同的类型。下面,我们将从简单到复杂介绍Requests中各种可用的身份验证形式。

基本身份认证HTTP Basic Auth

许多需要身份验证的WEB服务都使用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将尝试从用户的netrc文件中获取对应URL网址的身份认证信息。netrc文件包含信息将覆盖使用headers=设置的原始HTTP认证头。
如果找到主机名的认证信息,则使用HTTP Basic Auth发送请求。

摘要式身份认证

另一种非常流行的HTTP身份认证形式是摘要式身份认证Digest Authentication,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 认证的请求:

    >>> 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 代码库。

OAuth2和OpenID连接身份认证

requests-oauthlib库还处理OAuth2,OAuth2是OpenID Connect身份验证机制的基础。有关各种OAuth2认证管理流的详细信息,请参阅requests-oauthlib OAuth2文档

其他身份认证

Requests的设计使得很容易使用其他形式的身份认证。开源社区的成员经常为更复杂或不常用的身份验证格式编写身份认证处理程序。其中一些最优秀的已被收集在Requests organization 页面中,包括:

  • Kerberos
  • NTLM公司
    如果您想使用这些形式的身份验证,请直接转到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]>
    

当一个身份认证程序附加到一个请求时,在设置 request 期间就会调用该模块。因此,__call__()方法必须执行使身份认证有效所需的操作。某些形式的身份认证还将添加钩子以提供进一步的功能。
你可以在Requests organization 页面的auth.py文件中找到更多示例。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值