领取资料,咨询答疑,请➕wei: June__Go
上一小节中,我们学习了requests的cookies参数使用方法,本小节我们讲解一下requests库中的session会话对象。
在requests中,如果直接利用get()或post()等方法的确可以做到模拟网页的请求,但是这实际上是相当于不同的会话,也就是说相当于你用了两个浏览器打开了不同的页面。
设想这样一个场景,第一个请求利用post() 方法登录了某个网站,第二次想获取成功登录后的自己的个人信息, 你又用了一次get()方法去请求个人信息页面。实际上,这相当于打开了两个浏览器,这是两个完全不相关的会话,能成功获取个人信息吗?那当然不能。
有小伙伴可能说了,我在两次请求时设置一样的cookies不就行了?可以,但这样做起来显得很烦琐,我们有更简单的解决方法。
其实解决这个问题的主要方法就是维持同一个会话,也就是相当于打开一个新的浏览器选项卡而不是新开一个浏览器。但是我又不想每次设置cookies,那该怎么办呢?这时候就有了新的利器一Session对象。
使用Session对象,可以在整个会话期间自动保存、发送和管理cookies。即同一会话的多个请求之间可以共享cookies。
- requests.session 的使用方法
session 实例在请求了一个网站后,对方服务器设置在本地的 cookies 会保存在 session 中,下一次再使用 session请求对方服务器的时候,会带上前一次的 cookies,示例如下
import requests# 创建一个session对象
s = requests.session()
print("会话初始cookies:", dict(s.cookies))
# 第一次请求
r1 = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')print("第一次请求后,会话现有cookies:", dict(s.cookies))
# 第二次请求
r2 = s.get('http://httpbin.org/cookies')
print("第二次请求后,会话现有cookies:", dict(s.cookies))
代码执行结果如下
会话初始cookies: {}
第一次请求后,会话现有cookies: {'sessioncookie': '123456789'}
第二次请求后,会话现有cookies: {'sessioncookie': '123456789'}
注:会话初始cookies为空,第一次请求后,会话将自动保存已经生成的cookies:{'sessioncookie': '123456789'},后续第二次请求时,直接使用会话中已经保存的cookies,这样就实现了,同一会话的多个请求之间可以共享cookies。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei: June__Go