您的位置: 网站首页> requests爬虫> 当前文章
requests会话对象Session跨请求保持cookie
老董-我爱我家房产SEO2021-11-12174围观,133赞
http协议是无状态的,也就是说正常情况下同1个浏览器访问了A页面,接下来访问B页面,服务器是不知道这2次是1个人的。基于此引入了一些其他用户跟踪技术(比如cookie与session)。
requests提供了一种会话对象来实现跨请求保持某些参数。它也会在同一个Session实例发出的所有请求之间保持cookie, 而且如果向同一主机发送多个请求,底层的TCP连接会被重用从而带来性能提升。
先看一个传统的get请求
r = requests.get('http://httpbin.org/cookies/set/sessioncookie/123456789') # 第1次请求 print(r.text) print('==================') r = requests.get("http://httpbin.org/cookies") # 第2次请求 print(r.request.headers)
{ "cookies": { "sessioncookie": "123456789" } } ================== {'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
上述代码可以看出第1次请求服务器返回cookie内容,第2次请求却没有携带上cookie内容,所以这2次请求服务器并不知道这是同1个客户端所为!
再看Session实例请求
s = requests.Session() r = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') # 第1次请求 print(r.text) print('==================') r = s.get("http://httpbin.org/cookies") # 第2次请求 print(r.request.headers)
{ "cookies": { "sessioncookie": "123456789" } } ================== {'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'sessioncookie=123456789'}
上述代码可以看出第1次请求服务器返回cookie内容,第2次请求头里携带上了cookie内容,实现了跨请求保持cookie!
通过方法传参不能保持cookie
会话能保存的是服务器端响应过来的cookie,所以即使使用了会话,如果是靠方法级别的cookie参数传参则不会被跨请求保持,如下代码可以看到第1个请求是通过cookie参数传参cookie,第2个请求却没有cookie内容。
s = requests.Session() r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'}) print(r.text) print('=============') r = s.get('http://httpbin.org/cookies') print(r.text) # 返回cookie内容
{ "cookies": { "from-my": "browser" } } ============= { "cookies": {} }
会话还可以用作前后文管理器,这样就能确保with区块退出后会话能被关闭,即使发生了异常也一样。
with requests.Session() as s: s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
更多关于会话和cookie操作可以参考官方文档。
https://docs.python-requests.org/zh_CN/latest/api.html#api-cookies
https://docs.python-requests.org/zh_CN/latest/api.html#sessionapi
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
requests会话对象Session跨请求保持cookie文章写得不错,值得赞赏
站点信息
- 网站程序:Laravel
- 客服微信:a772483200