Python Requests库Session对象的跨请求保持与参数覆盖机制详解
本文详解Python中requests库Session对象的两个核心妙用:一是跨请求自动保持Cookie等会话状态,简化接口测试流程;二是通过设置Session属性提供请求默认值(如Auth和Headers)。重点解析方法层参数如何覆盖Session层参数,以及如何通过显式设置None来省略默认属性,帮助开发者更高效地管理HTTP会话。
在进行接口测试时,通常需要调用多个接口并发起多次请求。在这些连续请求中,往往需要维持某些共享数据的一致性,例如登录后的Cookie信息。
妙用1
Requests库提供的Session对象能够帮助我们在跨请求时保持特定的参数,并在同一Session实例发出的所有请求间自动维护Cookie状态。 以跨请求保持Cookie为例,可以在命令行中执行以下代码:
# 创建一个session对象
s = requests.Session()
# 用session对象发出get请求,设置cookies
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 用session对象发出另外一个get请求,获取cookies
r = s.get("http://httpbin.org/cookies")
# 显示结果
r.text
'{"cookies": {"sessioncookie": "123456789"}}'
妙用2
此外,Session对象还能用于设定请求方法的默认数据,这通过配置Session对象的属性来实现。
例如,我们可以设置请求的认证信息(auth)和请求头(headers)作为默认参数:
# 创建一个session对象
s = requests.Session()
# 设置session对象的auth属性,用来作为请求的默认参数
s.auth = ('user', 'pass')
# 设置session的headers属性,通过update方法,将其余请求方法中的headers属性合并起来作为最终的请求方法的headers
s.headers.update({'x-test': 'true'})
# 发送请求,这里没有设置auth会默认使用session对象的auth属性,这里的headers属性会与session对象的headers属性合并
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
# 查看发送请求的请求头
r.request.headers
此时生成的请求头部信息如下:
{'Authorization': 'Basic dXNlcjpwYXNz', 'x-test': 'false'}
注意1:在具体的请求方法中传入的参数会覆盖Session中设置的参数。示例如下:
在上述请求中显式添加auth参数:
r = s.get('http://httpbin.org/headers', auth=('user','hah'), headers={'x-test2': 'true'})
查看该请求发出的头部信息
{'Authorization': 'Basic dXNlcjpoYWg=', 'x-test': 'false'}
可以观察到,请求方法中指定的Authorization值发生了改变,这表明方法层的参数优先级高于Session层的属性,实现了覆盖效果。
注意2:如果在request请求中希望省略Session对象中已设置的某个属性,只需在方法层参数中将该键的值显式设置为None,该键就会被自动忽略。
再举一个例子:
TBD
总结
以上即为Python中requests库Session对象的详细用法解析,希望能为读者提供帮助。感兴趣的朋友可继续参考本站其他文章,如《Python面向对象编程基础解析(一)》、《13个最常用的Python深度学习库介绍》等。如有任何疑问,欢迎随时留言,小编会及时回复。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









