Python requests模块session代码实例

时间:2021-05-22

http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制。requests也提供了相应的方法去操纵它们。

requests中的session对象能够让我们跨http请求保持某些参数,即让同一个session对象发送的请求头携带某个指定的参数。当然,最常见的应用是它可以让cookie保持在后续的一串请求中。

下面,通过官方文档中的示例来了解如何使用它。

import requestss = requests.Session()# 第一步:发送一个请求,用于设置请求中的cookies# tips: http://httpbin.org能够用于测试http请求和响应s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')# 第二步:再发送一个请求,用于查看当前请求中的cookiesr = s.get("http://httpbin.org/cookies")print(r.text)

运行结果

{ "cookies": { "sessioncookie": "123456789" }}

从结果中我们可以看出,第二次请求已经携带上了第一次请求所设置的cookie,即通过session达到了保持cookie的目的。示例中创建了一个requests.Session()对象,通过该对象来进行http请求操作,该操作基本类似于requests.request()

由于session让请求之间具有了连贯性,那么,就有了跨请求参数和非跨请求参数的区别。即有时我想让所有请求均带有某个参数,而有时我只是想让单独的一条请求带上临时的参数。通过下面的例子来了解如何使用。

import requestss = requests.Session()s.headers.update({'x-test': 'true'})# both 'x-test' and 'x-test2' are sentr1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})print(r1.text)# 'x-test' is sentr2 = s.get('http://httpbin.org/headers')print(r2.text)

运行结果

# r1.text{ "headers": { "Accept": "**", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Amzn-Trace-Id": "Root=1-5e91656f-e9741db4c2ca2fd6e0628396", "X-Test": "true" }}

从结果中我们可以得出两条结论:

session可以为请求方法提供缺省数据,比如第一次请求中的{'x-test': 'true'}就是缺省数据,此时的缺省数据就是跨请求参数。
方法级别的参数不会被跨请求保持,比如第二次请求时,没有携带headers={'x-test2': 'true'},返回的结果中也没有{'x-test2': 'true'},说明该参数没有在第一次请求后被保持住。

参考资料

https://github.com/psf/requests/blob/master/requests/sessions.py

https://requests.readthedocs.io/en/master/user/advanced/#session-objects

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章