Python Requests - Session对象

2025年1月5日 | 阅读 4 分钟

Python 的 'requests' 包通常用于创建 HTTP 请求。它提供了一种直接且吸引人的方式来与在线服务和 API 进行交互。'Session' 对象是 'requests' 库中最强大的功能之一。会话对象允许你在多个请求之间保存特定的参数。当你需要向同一个服务器发送多个请求,同时保留诸如 cookie、header 等数据时,这尤其方便。

创建 Session 对象

要生成会话对象,请导入 'requests' 模块,然后实例化 'Session' 类。

语法

持久化参数

创建会话对象后,你可以设置适用于所有后续请求的设置。这些参数包括 headers、cookies、身份验证凭据等。

Cookie 持久化

会话对象的常见用途之一是在多个请求之间保存 cookie。当你使用会话对象提交请求时,服务器返回的任何 cookie 都会保存在会话中,并在后续发送到同一域的请求时被包含在内。

语法

在前面的示例中,登录请求返回的 cookie 被保存在会话对象 'session' 中。这些 cookie 将在会话期间进行的任何后续请求中自动包含。

自动内容编码

会话对象还会根据响应头自动解码来自服务器的文本,从而更轻松地处理各种类型的内容,例如 JSON 和 HTML。

连接池

在幕后,会话对象使用连接池,这在向同一服务器发送许多请求时可以提高效率。这意味着多个请求可以共享同一个底层 TCP 连接,从而降低了创建新连接的开销。

会话级 Headers

你还可以指定会话级别的 headers,这些 headers 将包含在该会话中进行的所有请求。这对于指定自定义 headers(如 user-agent 字符串或身份验证令牌)非常有用。

语法

代码

输出

Redirected from https://example.com/large_file to https://example.com/large_file

在此代码中:

  • 使用 'requests.session()' 构建会话对象。
  • 在 'session.proxies' 中设置代理配置。
  • 使用 'session.verify' 和 'session.cert' 配置 SSL 验证和客户端证书。
  • 创建一个名为 'custom_redirect' 的自定义重定向解析函数。
  • 'session.resolve_redirects' 可用于指定自定义重定向解析函数。
  • 要下载大文件,请使用 GET 请求并指定流式传输。
  • 分块迭代响应内容并将其保存到文件。
  • 最后,使用 'session.close()' 关闭会话并释放任何相关资源。

超时和重试

会话对象允许你为该会话期间发出的请求设置超时和重试。这对于处理不可靠的网络或响应缓慢的服务很有用。

语法

在前面的示例中,使用会话 'session' 发出的任何请求都将具有 10 秒的超时,并且失败的请求最多会重试三次。

性能优化

通过减少创建新连接的开销以及每次请求都发送冗余的 headers,会话对象可以进一步提高效率。当向同一服务器发送多个请求时,这尤其有用,因为它减少了连接创建和拆卸所花费的时间。

上下文管理

会话对象支持上下文管理,并可在 'with' 语句中使用。这可以确保在完成会话后,与会话关联的所有资源都得到正确清理。

语法

在 'with' 语句中使用会话对象可确保在块退出时释放会话保留的所有资源。

总之,Python 'requests' 模块中的会话对象为管理状态、优化性能和处理高级 HTTP 请求提供了一个全面的解决方案。通过在连续请求之间存储 cookie、headers 和身份验证凭据等参数,会话对象使得与 Web 服务和 API 的通信更加容易。此外,连接池、超时、重试、代理支持、SSL 验证和自定义重定向处理等功能提供了管理各种场景所需的灵活性和控制力。通过利用会话对象,开发人员可以创建健壮且高效的应用程序,用于网络爬虫、API 集成和数据检索等活动,使 'requests' 模块成为 Python 生态系统中宝贵的工具。