认证
简单的 HTTP 身份验证
可以使用以下方法实现简单的 HTTP 身份验证:
from requests import post
foo = post('http://natas0.natas.labs.overthewire.org', auth=('natas0', 'natas0'))
对于以下内容,这在技术上是简短的:
from requests import post
from requests.auth import HTTPBasicAuth
foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPBasicAuth('natas0', 'natas0'))
HTTP 摘要式身份验证
HTTP 摘要身份验证以非常类似的方式完成,请求为此提供了不同的对象:
from requests import post
from requests.auth import HTTPDigestAuth
foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPDigestAuth('natas0', 'natas0'))
自定义验证
在某些情况下,内置的身份验证机制可能还不够,想象一下这个例子:
如果发件人具有正确的用户代理字符串,特定标头值并通过 HTTP 基本身份验证提供正确的凭据,则服务器配置为接受身份验证。为了实现这一点,应该准备一个自定义身份验证类,继承 AuthBase,它是 Requests 身份验证实现的基础:
from requests.auth import AuthBase
from requests.auth import _basic_auth_str
from requests._internal_utils import to_native_string
class CustomAuth(AuthBase):
def __init__(self, secret_header, user_agent , username, password):
# setup any auth-related data here
self.secret_header = secret_header
self.user_agent = user_agent
self.username = username
self.password = password
def __call__(self, r):
# modify and return the request
r.headers['X-Secret'] = self.secret_header
r.headers['User-Agent'] = self.user_agent
r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
return r
然后可以使用以下代码:
foo = get('http://test.com/admin', auth=CustomAuth('SecretHeader', 'CustomUserAgent', 'user', 'password' ))