极简requests 库 Session

本文详细介绍了requests库中Session对象的工作原理,包括连接池管理、会话参数保持、持久连接、请求方法、配置共享以及自定义适配器。通过示例展示了如何模拟登录、设置自定义HTTP头和处理Cookies。
摘要由CSDN通过智能技术生成

1. 架构

Session对象在内部使用一个TCP连接池,用于管理TCP连接。当你创建一个Session对象时,它会自动为你创建一个连接池。当你使用Session对象发送请求时,它会从连接池中获取一个可用的连接,然后使用这个连接发送请求。如果连接池中没有可用的连接,Session对象会自动创建一个新的连接。当请求完成后,Session对象会将连接放回连接池,以供后续请求使用。

2. 核心内容

  • 会话对象(Session)Session对象能够跨请求保持某些参数。它会存储cookies,直到会话结束,允许你在同一Session实例发出的所有请求之间保持这些cookies。
  • 持久连接Session对象还支持持久连接。这意味着在多次请求之间,底层的TCP连接可以被重用,这可以显著提高性能。
  • 请求方法Session对象提供了与requests模块相同的方法,如get(), post(), put(), delete()等,可以用来发送请求。
  • 配置共享:在整个会话期间,设置一次参数(如认证信息、超时时间等)就可以应用于所有通过该 Session 发送的请求。
  • 适配器支持: 可以给 Session 添加自定义适配器来定制网络行为,例如重试策略。

3. 代码案例

当然,让我们继续补充一些关于requests库中Session对象的案例。

案例1: 模拟登录并保持会话

在这个案例中,我们将使用Session对象来模拟一个登录过程,并保持会话以访问需要认证的页面。

import requests
# 创建一个Session对象
session = requests.Session()
# 登录URL和登录数据
login_url = 'https://example.com/login'
login_data = {
    'username': 'your_username',
    'password': 'your_password'
}
# 使用Session对象发送POST请求进行登录
response = session.post(login_url, data=login_data)
# 现在可以使用Session对象访问需要认证的页面
protected_url = 'https://example.com/protected'
response = session.get(protected_url)
print(response.text)

在这个例子中,我们首先发送一个POST请求到登录URL,然后使用相同的Session对象访问一个需要认证的页面。由于Session对象会自动处理cookies,所以我们可以直接访问受保护的页面而不需要再次登录。

案例2: 使用Session对象发送带有自定义头的请求

有时,我们可能需要发送带有自定义HTTP头的请求。使用Session对象,我们可以为所有通过该对象发送的请求设置默认的头部信息。

import requests
# 创建一个Session对象
session = requests.Session()
# 设置默认的HTTP头
session.headers.update({
    'User-Agent': 'my-app/0.0.1',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
})
# 使用Session对象发送GET请求,请求会包含我们设置的自定义头
response = session.get('https://example.com/data')
print(response.text)

在这个例子中,我们通过session.headers.update()方法为所有通过session对象发送的请求设置了自定义的HTTP头。这样,我们就不需要在每个请求中单独设置这些头部信息。

案例3: 使用Session对象处理Cookies

Session对象会自动处理cookies,包括发送和接收。我们可以通过Session对象的cookies属性来查看和操作cookies。

import requests
# 创建一个Session对象
session = requests.Session()
# 发送一个请求,这个请求会设置一个cookie
response = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
# 查看Session对象中的cookies
print(session.cookies)
# 发送另一个请求,这个请求会使用之前设置的cookie
response = session.get('https://httpbin.org/cookies')
print(response.text)

在这个例子中,我们首先发送一个请求来设置一个cookie,然后通过session.cookies属性查看所有已设置的cookies。当我们发送后续请求时,Session对象会自动附带上次请求设置的cookie。
请注意,实际使用时,您需要将示例中的URL替换为真实的登录页面和受保护页面的URL,并提供正确的登录凭据。这些示例仅用于演示如何使用requests库中的Session对象。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉小雨

你的激励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值