Python Requests库Session对象的跨请求保持与参数覆盖机制详解

Evan
Evan
发布时间:2026-10-13 | 3人浏览过
原创

本文详解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深度学习库介绍》等。如有任何疑问,欢迎随时留言,小编会及时回复。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表