許多 web 服務都須要身份認證,而且也有多種不一樣的認證類型。 如下,咱們會從簡單到複雜概述 Requests 中可用的幾種身份認證形式。html
許多要求身份認證的web服務都接受 HTTP Basic Auth。這是最簡單的一種身份認證,而且 Requests 對這種認證方式的支持是直接開箱便可用。python
以 HTTP Basic Auth 發送請求很是簡單:git
>>> from requests.auth import HTTPBasicAuth >>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass')) <Response [200]>
事實上,HTTP Basic Auth 如此常見,Requests 就提供了一種簡寫的使用方式:github
>>> requests.get('https://api.github.com/user', auth=('user', 'pass')) <Response [200]>
像這樣在一個元組中提供認證信息與前一個 HTTPBasicAuth
例子是徹底相同的。web
若是認證方法沒有收到 auth
參數,Requests 將試圖從用戶的 netrc 文件中獲取 URL 的 hostname 須要的認證身份。json
若是找到了 hostname 對應的身份,就會以 HTTP Basic Auth 的形式發送請求。api
另外一種很是流行的 HTTP 身份認證形式是摘要式身份認證,Requests 對它的支持也是開箱便可用的:網站
>>> from requests.auth import HTTPDigestAuth >>> url = 'http://httpbin.org/digest-auth/auth/user/pass' >>> requests.get(url, auth=HTTPDigestAuth('user', 'pass')) <Response [200]>
Oauth 是一種常見的 Web API 認證方式。 requests-oauthlib
庫可讓 Requests 用戶簡單地建立 OAuth 認證的請求:url
::spa
>>> 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 代碼庫。
Requests 的設計容許其餘形式的身份認證用簡易的方式插入其中。開源社區的成員時常爲更復雜或不那麼經常使用的身份認證形式編寫認證處理插件。其中一些最優秀的已被收集在 Requests organization 頁面中,包括:
若是你想使用其中任何一種身份認證形式,直接去它們的GitHub頁面,依照說明進行。
若是你找不到所須要的身份認證形式的一個良好實現,你也能夠本身實現它。Requests 很是易於添加你本身的身份認證形式。
要想本身實現,就從 requests.auth.AuthBase
繼承一個子類,並實現 __call__()
方法:
>>> import requests >>> class MyAuth(requests.auth.AuthBase): ... def __call__(self, r): ... # Implement my authentication ... return r ... >>> url = 'http://httpbin.org/get' >>> requests.get(url, auth=MyAuth()) <Response [200]>
當一個身份認證模塊被附加到一個請求上,在設置 request 期間就會調用該模塊。所以 __call__
方法必須完成使得身份認證生效的全部事情。一些身份認證形式會額外地添加鉤子來提供進一步的功能。
你能夠在 Requests organization 頁面的 auth.py
文件中找到更多示例。