Requests - 概览
Requests - 概览
Section titled “Requests - 概览”Requests 是一个优雅且简单的 Python HTTP 库,以其“为人服务的 HTTP”(HTTP for Humans)著称。它让您能以令人难以置信的便捷方式发送 HTTP/1.1 请求,抽象掉了在 Python 中进行 Web 请求通常会遇到的复杂性。对于大多数需要与 Web 服务和 API 交互的 Python 开发者来说,它是一个事实上的标准。
Requests 的官方文档是一个非常出色的资源,可以在这里找到:https://requests.readthedocs.io/en/latest/
为什么使用 Requests?
Section titled “为什么使用 Requests?”虽然 Python 的标准库包含了诸如 urllib.request 等模块用于处理 HTTP,但 Requests 提供了明显更直观且用户友好的 API。主要优点包括:
- 支持所有常用 HTTP 方法(GET、POST、PUT、DELETE、HEAD、OPTIONS)的简洁语法。
- 自动内容解码(例如,从 UTF-8)和解压缩(例如,gzip)。
- 默认提供类似浏览器的 SSL 验证(HTTPS)。
- 带有 cookie 持久性和连接池的会话(Session)管理。
- 轻松处理各种身份验证机制。
- 轻松实现文件上传和 multipart 请求。
- 支持国际化域名和 URL。
使用 Python 的包管理器 pip 安装 Requests 非常简单。强烈建议为您的项目使用虚拟环境(virtual environment)来干净地管理依赖。
pip install requests安装完成后,您可以在 Python 脚本中导入它:import requests。
核心功能一览
Section titled “核心功能一览”Requests 提供了一套丰富的功能集,可以无缝处理大多数 HTTP 通信需求:
通过简单的函数(例如,requests.get()、requests.post())支持所有标准 HTTP 方法(GET、POST、PUT、DELETE、HEAD、OPTIONS)。您可以轻松传递 URL 参数、自定义头部(headers)和请求体(request bodies)。
Response 对象提供了便捷的访问方式:.status_code(状态码)、.headers(头部)、.content(原始字节内容)、.text(解码后的字符串)和 .json()(用于解析 JSON 响应)。
通过将字典传递给 headers 参数来发送自定义 HTTP 头部。
URL 参数(查询字符串)
Section titled “URL 参数(查询字符串)”在 GET 请求中,将 URL 参数(例如,?key=value)作为字典传递给 params 参数。
POST/PUT 的载荷(Payloads)
Section titled “POST/PUT 的载荷(Payloads)”使用 data 参数发送表单编码数据。对于 JSON 载荷,json 参数会自动序列化 Python 字典并设置正确的 Content-Type 头部。
Cookies
Section titled “Cookies”自动处理从服务器接收的 cookies,并允许您发送自定义 cookies。
Session 对象
Section titled “Session 对象”requests.Session() 对象可在多个请求中保持参数(如 cookies、身份验证和头部)。它们还利用 urllib3 的连接池(connection pooling),提高了对同一主机重复请求的性能。
SSL/TLS 验证
Section titled “SSL/TLS 验证”默认验证 HTTPS 请求的 SSL 证书,这对于安全通信至关重要。提供自定义 CA bundle 的选项。
内置支持常见的身份验证方案,如 HTTP Basic Auth 和 Digest Auth,并允许使用自定义身份验证处理器。
超时设置(Timeouts)
Section titled “超时设置(Timeouts)”对于健壮的应用程序至关重要,可以为请求指定超时时间,以防止服务器无响应时发生无限期阻塞。
错误处理和重定向
Section titled “错误处理和重定向”为网络问题或超时提供清晰的异常。response.raise_for_status() 方法可用于在 HTTP 响应状态码不佳(4xx 或 5xx)时引发 HTTPError 异常。重定向处理是自动的,但可配置。
这里是 Requests 实际应用的一个片段,用于从公共 API 获取数据:
import requests
URL = 'https://api.github.com/events'
try: # Make a GET request - 发送一个 GET 请求 response = requests.get(URL, timeout=5) # Added a timeout - 添加了超时设置
# Check if the request was successful (status code 200-299) # 检查请求是否成功(状态码 200-299) response.raise_for_status() # Raises an HTTPError for bad responses - 对于错误响应抛出 HTTPError 异常
print(f"Status Code: {response.status_code}") # 状态码: print(f"Content-Type: {response.headers.get('Content-Type')}") # Content-Type:
# Get the JSON response (list of events) # 获取 JSON 响应(事件列表) events = response.json() print(f"Number of events received: {len(events)}") # 收到的事件数量: if events: print(f"Type of the first event: {events[0]['type']}") # 第一个事件的类型:
except requests.exceptions.HTTPError as http_err: print(f'HTTP error occurred: {http_err} - Status: {http_err.response.status_code}') # 发生 HTTP 错误:{http_err} - 状态码:{http_err.response.status_code}except requests.exceptions.ConnectionError as conn_err: print(f'Connection error occurred: {conn_err}') # 发生连接错误:{conn_err}except requests.exceptions.Timeout as timeout_err: print(f'Timeout error occurred: {timeout_err}') # 发生超时错误:{timeout_err}except requests.exceptions.RequestException as err: print(f'An unexpected error occurred: {err}') # 发生一个意外错误:{err}Status Code: 200Content-Type: application/json; charset=utf-8Number of events received: 30Type of the first event: PushEvent(Note: Actual event type and count may vary) # (注意:实际的事件类型和数量可能会有所不同)本教程将深入探讨这些功能,使您能够有效地使用 Requests 库来完成 Python 项目中的各种 Web 交互任务。