Python requests模块Session对象使用详解

月亮慢半拍
月亮慢半拍
发布时间:2026-10-14 | 4人浏览过
原创

本文详解Python requests库中Session对象的使用。通过创建Session实例,可实现HTTP请求间的状态保持,自动传递Cookie。同时,Session支持配置全局缺省参数(如Headers),并允许在单次请求中覆盖或添加临时参数,从而灵活处理跨请求与独立请求的参数差异。

Session对象与状态保持基础

HTTP协议本身是无状态的,这意味着默认情况下服务器无法识别连续请求是否来自同一用户。为了在请求之间维持状态信息,引入了Session和Cookie机制。Python的requests库提供了相应的功能来操作这些机制。

requests库中的Session对象允许我们在多个HTTP请求中保持特定的参数。这意味着,使用同一个Session对象发起的后续请求,可以自动携带之前设置的特定参数。最常见的应用场景是,Session能够确保Cookie在一系列连续请求中保持一致,无需手动重复设置。

接下来,我们将通过官方文档提供的示例代码,具体演示Session对象的使用方法。

Session保持Cookie的示例


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

查看运行结果


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

从输出结果可以看出,第二次请求成功携带了第一次请求中设置的Cookie,这证明了Session对象确实实现了Cookie的持久化保持。在示例中,我们首先创建了一个requests.Session()实例,并利用该实例执行HTTP请求。其基本用法与requests.request()函数类似,但具备状态保持能力。

由于Session使得请求之间具有连贯性,因此区分跨请求参数和非跨请求参数变得重要。有时我们需要让所有通过该Session发出的请求都携带某个固定参数,而有时又希望仅对某一条特定请求添加临时参数。下面的示例将展示如何区分和处理这两种情况。

跨请求参数与局部参数的配置


import requests

s = requests.Session()
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r1.text)
# 'x-test' is sent
r2 = 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-b99f14a4d6f47f9e55a90bb4", 
  "X-Test": "true", 
  "X-Test2": "true"
 }
}
# r2.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'}即为缺省数据,这类数据属于跨请求参数,会自动应用到后续所有通过该Session发起的请求中。其次,方法级别的参数不会被跨请求保持。例如,在第二次请求时,如果未显式携带headers={'x-test2': 'true'},返回结果中也不会出现{'x-test2': 'true'},这说明该参数仅在当前请求有效,并未被Session持久化保存。

参考资料

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

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

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

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表