認證

簡單的 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' ))