在 Python 的 requests 库中,会话(Session) 对象提供了一种更高级的请求管理方式。通过会话,您可以在多个请求之间保持某些特定参数或状态,比如共享的 cookies、HTTP headers、连接池,这使得处理需要多次请求的场景更加方便和高效。
主要优点
- 保持会话中的 cookies:多个请求之间可以共享 cookies,这在需要维持用户登录状态或其他会话信息的场景中非常有用。
- 共享 headers:在会话中,可以设置全局 headers,这样就不需要在每个请求中重复设置相同的 headers。
- 持久的连接:会话对象在后台保持持久的 TCP 连接,从而提高请求性能,尤其是在需要发送大量请求时。
requests Session 的基本用法
创建会话对象
通过requests.Session()
来创建一个会话对象:
import requests
session = requests.Session()
在会话中发送请求
可以使用会话对象发送各种类型的请求(GET、POST、PUT 等)。会话在多个请求间保持共享的状态(如 cookies)。
response = session.get('https://httpbin.org/get')
print(response.text)
设置会话级别的 headers
可以在会话中设置全局的 headers,所有通过该会话发出的请求都会自动带上这些 headers。
session.headers.update({'User-Agent': 'my-program'})
response = session.get('https://httpbin.org/headers')
print(response.json())
你仍然可以为每个请求单独设置参数:
response = session.get('https://httpbin.org/headers', headers={'A': 'b'})
会话中的 cookies
会话会在请求间自动管理和共享 cookies。当你向某个网站发送请求并接收到 cookies 时,后续的请求会自动带上这些 cookies。
response = session.get('https://httpbin.org/cookies/set/token/123456')
response = session.get('https://httpbin.org/cookies')
print(response.json())
持久化特定的 URL 参数
会话可以预设 URL 参数,所有的请求都会带上这些参数。
session.params = {'from': 'perfcode.com'}
response = session.get('https://httpbin.org/get')
print(response.url)
https://httpbin.org/get?from=perfcode.com
身份认证
会话支持全局的身份认证设置,适用于需要身份验证的 API。
session.auth = ('user', 'pass')
response = session.get('https://httpbin.org/basic-auth/user/pass')
print(response.status_code)
关闭会话
会话使用后,可以通过close()
方法关闭,以释放连接资源。
session.close()
在上下文管理器中使用会话
你可以使用上下文管理器来自动管理会话的创建和关闭。
import requests
session = requests.Session()
with requests.Session() as session:
response = session.get('https://httpbin.org/get')
print(response.text)