使用 Python 中的 requests 模块执行身份验证
超文本传输协议是万维网或互联网的基础。本质上,它是一个应用层协议,其主要任务是将数据从 Web 服务器传输到 Web 浏览器,例如 Chrome、Edge、Firefox 和 Brave。
HTTP 请求
针对唯一的网址或 URL 进行,以获取所需的资源和媒体文档,例如 HTML、PDF、文本文件、图像、视频等。
URL,也称为统一资源定位器,是用于在 Internet 上定位内容的唯一网址或路径,每个 URL 都指向特定的内容。
Python 是一种动态类型的多用途编程语言,支持大量库。requests
模块提供了使用 Python 编程语言执行 HTTP 请求的实用程序。
在 Python 中使用 requests
模块执行身份验证
要在 requests
模块的帮助下执行身份验证,我们可以使用 requests
库中的 HTTPBasicAuth
类。这个类接受两个参数,一个用户名和一个密码。
这个类代表一个 HTTP Basic Authentication
,它附加到一个请求上。身份验证对象提供给 get()
方法的 auth
参数。
让我们通过一个例子来理解这个类及其用法。请参考以下 Python 代码。
from requests.auth import HTTPBasicAuth
url = "<any valid url>"
basic = HTTPBasicAuth("username", "password")
requests.get(url, auth=basic)
身份验证成功后,将获得具有 200
状态代码的响应对象。
编写上述代码的另一种更直接的方法如下。
from requests.auth import HTTPBasicAuth
url = "<any valid url>"
requests.get(url, auth=("username", "password"))
可以为元组中的 auth
参数提供用户名和密码。
Python 中的摘要式身份验证
另一种流行且直接的 HTTP 身份验证形式是摘要式身份验证
。这种类型的身份验证可以在 HTTPDigestAuth
的帮助下执行。
与 HTTPBasicAuth
类一样,此类也接受用户名和密码。
让我们看一个例子。请参考以下 Python 代码。
from requests.auth import HTTPBasicAuth
url = "<any valid url>"
requests.get(url, auth=HTTPDigestAuth("username", "password"))
Python 中的 OAuth 1
身份验证
OAuth 1
身份验证是一种强大的身份验证形式。
在这里,OAuth
代表开放授权。这种形式的身份验证适用于使用 OAuth
的 Web API 或应用程序编程接口。
这种类型的身份验证可以在 OAuth1
类的帮助下执行。这个类是 requests-oauthlib
库的一部分。要安装这个 Python 库,请使用以下 pip
命令。
pip install requests-oauthlib
让我们借助一个例子来理解这个类。请参阅以下 Python 代码。
import requests
from requests_oauthlib import OAuth1
url = "<any valid url>"
YOUR_APP_KEY = "YOUR_APP_KEY"
YOUR_APP_SECRET = "YOUR_APP_SECRET"
USER_OAUTH_TOKEN = "USER_OAUTH_TOKEN"
USER_OAUTH_TOKEN_SECRET = "USER_OAUTH_TOKEN_SECRET"
auth = OAuth1(YOUR_APP_KEY, YOUR_APP_SECRET, USER_OAUTH_TOKEN, USER_OAUTH_TOKEN_SECRET)
requests.get(url, auth=auth)
Python 中的 OAuth 2
身份验证
2012 年,OAuth 1
被称为 OAuth 2
的更新且更可靠的身份验证协议所取代。
在 OAuth 2
的帮助下,开发人员和企业主可以通过他们的网站提供对资源的同意访问,并限制可疑行为。
OAuth 2
身份验证使用访问令牌。访问令牌是一种允许用户进行身份验证的特殊数据。
用户必须在向网站服务器发出的每个请求中包含其访问令牌,以证明其身份外行身份验证
并访问他们有权访问的任何内容。
由于可以使用网络浏览器轻松访问令牌,因此出于安全目的,每个访问令牌都有一个到期日期和时间。
使用 OAuth 2
身份验证,用户可以在多个平台上进行身份验证,从而为最终用户节省时间并提升令人满意的用户体验。
可以使用 requests_oauthlib
模块执行 OAuth 2
身份验证。这个模块有一个我们可以使用的类 OAuth2Session
。
以下是 OAuth2Session
的类签名。
class requests_oauthlib.OAuth2Session(client_id=None, client=None, auto_refresh_url=None, auto_refresh_kwargs=None, scope=None, redirect_uri=None, token=None, state=None, token_updater=None, **kwargs)
让我们通过一个例子来了解它的用法。
from requests_oauthlib import OAuth2Session
client_id = "your_client_id"
client_secret = "your_client_secret"
url = "<any valid url>"
oauth = OAuth2Session(client_id, redirect_uri=url)
token = oauth.fetch_token("<url to fetch access token>", client_secret=client_secret)
r = oauth.get("<url to a resource>")
OAuth2Session
类接受 client_id
和 client_secret
用于执行实际身份验证。
url
是一个必须完成身份验证的好网站。我们使用此类对象的 fetch_token()
方法获取新的访问令牌。
该令牌将用于会话的其余部分以访问内容。这里,<url to fetch access token>
应该是一个 HTTPS 网址。
一旦获得令牌,我们就可以使用此类对象的 get()
方法安全地访问网站上的内容。
要了解有关此方法的更多信息,请参阅官方文档此处。
Python 中的其他身份验证方法
除了上面提到的方法,我们还可以使用两个 Python 库进行身份验证。
requests Kerberos/GSSAPI
requests-ntlm
requests Kerberos/GSSAPI
库是一个基于 Python 的开源库,它扩大了 requests
库的范围。
requests
用于 HTTP
请求,但 requests Kerberos/GSSAPI
库支持 Kerberos/GSSAPI 身份验证和相互身份验证。
以下 Python 描述了如何使用此库执行基本身份验证。
import requests
from requests_kerberos import HTTPKerberosAuth
r = requests.get("<any valid url>", auth=HTTPKerberosAuth())
requests-ntlm
库是一个基于 Python 的开源库,用于 HTTP NTLM
身份验证。NTLM
代表 Windows NT LAN 管理器。
NTLM
协议通常被认为是不安全的,因为它是一个相当古老的协议并且基于过时的 密码学
算法。
因此,它很容易受到诸如传递哈希攻击和蛮力攻击等可疑攻击。要安装此库,请在任何终端中执行以下 pip
命令。
pip install requests_ntlm
下面的 Python 描述了如何使用这个库来执行 NTLM
身份验证。
import requests
from requests_ntlm import HttpNtlmAuth
requests.get("<any valid url>", auth=HttpNtlmAuth("domain\\username", "password"))