- 请求教程
- 请求 - 首页
- 请求 - 概述
- 请求 - 环境设置
- 请求 - HTTP 请求是如何工作的?
- 请求 - 使用请求
- 处理 HTTP 请求的响应
- 请求 - HTTP 请求头
- 请求 - 处理 GET 请求
- 处理 POST、PUT、PATCH 和 DELETE 请求
- 请求 - 文件上传
- 请求 - 使用 Cookie
- 请求 - 处理错误
- 请求 - 处理超时
- 请求 - 处理重定向
- 请求 - 处理历史记录
- 请求 - 处理会话
- 请求 - SSL 证书
- 请求 - 身份验证
- 请求 - 事件钩子
- 请求 - 代理
- 请求 - 使用请求进行网页抓取
- 请求有用资源
- 请求 - 快速指南
- 请求 - 有用资源
- 请求 - 讨论
请求 - 身份验证
本章将讨论 Requests 模块中可用的身份验证类型。
我们将讨论以下内容 -
- HTTP 请求中的身份验证工作原理
- 基本身份验证
- 摘要身份验证
- OAuth2 身份验证
HTTP 请求中的身份验证工作原理
HTTP 身份验证是在服务器端,当客户端请求 URL 时,要求提供一些身份验证信息,例如用户名和密码。这是对客户端和服务器之间交换的请求和响应的额外安全措施。
在客户端,这些额外的身份验证信息(即用户名和密码)可以发送在请求头中,随后在服务器端进行验证。只有在身份验证有效的情况下,服务器端才会提供响应。
Requests 库在 requests.auth 中包含最常用的身份验证,分别是基本身份验证(HTTPBasicAuth)和摘要身份验证(HTTPDigestAuth)。
基本身份验证
这是向服务器提供身份验证的最简单形式。要使用基本身份验证,我们将使用 Requests 库提供的 HTTPBasicAuth 类。
示例
这是一个关于如何使用它的工作示例。
import requests from requests.auth import HTTPBasicAuth response_data = requests.get('httpbin.org/basic-auth/admin/admin123', auth = HTTPDigestAuth('admin', 'admin123')) print(response_data.text)
我们正在调用 URL https://httpbin.org/basic-auth/admin/admin123,其中用户为admin,密码为admin123。
因此,此 URL 在没有身份验证(即用户和密码)的情况下将无法工作。只有在使用 auth 参数提供身份验证后,服务器才会返回响应。
输出
E:\prequests>python makeRequest.py { "authenticated": true, "user": "admin" }
摘要身份验证
这是 Requests 提供的另一种身份验证形式。我们将使用 Requests 中的 HTTPDigestAuth 类。
示例
import requests from requests.auth import HTTPDigestAuth response_data = requests.get('https://httpbin.org/digest-auth/auth/admin/admin123', auth = HTTPDigestAuth('admin', 'admin123')) print(response_data.text)
输出
E:\prequests>python makeRequest.py { "authenticated": true, "user": "admin" }
OAuth2 身份验证
要使用 OAuth2 身份验证,我们需要“requests_oauth2”库。要安装“requests_oauth2”,请执行以下操作 -
pip install requests_oauth2
安装过程中,您的终端显示的内容将如下所示 -
E:\prequests>pip install requests_oauth2 Collecting requests_oauth2 Downloading https://files.pythonhosted.org/packages/52/dc/01c3c75e6e7341a2c7a9 71d111d7105df230ddb74b5d4e10a3dabb61750c/requests-oauth2-0.3.0.tar.gz Requirement already satisfied: requests in c:\users\xyz\appdata\local\programs \python\python37\lib\site-packages (from requests_oauth2) (2.22.0) Requirement already satisfied: six in c:\users\xyz\appdata\local\programs\pyth on\python37\lib\site-packages (from requests_oauth2) (1.12.0) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use rs\xyz\appdata\local\programs\python\python37\lib\site-packages (from requests ->requests_oauth2) (1.25.3) Requirement already satisfied: certifi>=2017.4.17 in c:\users\xyz\appdata\loca l\programs\python\python37\lib\site-packages (from requests->requests_oauth2) (2 019.3.9) Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xyz\appdata\l ocal\programs\python\python37\lib\site-packages (from requests->requests_oauth2) (3.0.4) Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xyz\appdata\local\pr ograms\python\python37\lib\site-packages (from requests->requests_oauth2) (2.8) Building wheels for collected packages: requests-oauth2 Building wheel for requests-oauth2 (setup.py) ... done Stored in directory: C:\Users\xyz\AppData\Local\pip\Cache\wheels\90\ef\b4\43 3743cbbc488463491da7df510d41c4e5aa28213caeedd586 Successfully built requests-oauth2
我们已完成“requests-oauth2”的安装。要使用 Google、Twitter 等 API,我们需要它们的同意,而这正是通过 OAuth2 身份验证完成的。
对于 OAuth2 身份验证,我们将需要 Client ID 和 Secret Key。如何获取它们的详细信息,请参阅https://developers.google.com/identity/protocols/OAuth2。
之后,登录到 Google API 控制台(位于 https://console.developers.google.com/)并获取 Client ID 和 Secret Key。
示例
这是一个关于如何使用“requests-oauth2”的示例。
import requests from requests_oauth2.services import GoogleClient google_auth = GoogleClient( client_id="xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", redirect_uri="https://127.0.0.1/auth/success.html", ) a = google_auth.authorize_url( scope=["profile", "email"], response_type="code", ) res = requests.get(a) print(res.url)
我们将无法重定向到给定的 URL,因为它需要登录 Gmail 帐户,但是在这里,您将从示例中看到 google_auth 可以工作,并且提供了授权的 URL。
输出
E:\prequests>python oauthRequest.py https://127.0.0.1/o/oauth2/auth?redirect_uri= http%3A%2F%2Flocalhost%2Fauth%2Fsuccess.html& client_id=xxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com& scope=profile+email&response_type=code