Python requests模块session代码实例

 更新时间:2020年04月14日 09:07:02   作者:酌三巡  
这篇文章主要介绍了Python requests模块session代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

requests中的session对象能够让我们跨http请求保持某些参数,即让同一个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让请求之间具有了连贯性,那么,就有了跨请求参数和非跨请求参数的区别。即有时我想让所有请求均带有某个参数,而有时我只是想让单独的一条请求带上临时的参数。通过下面的例子来了解如何使用。

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'}就是缺省数据,此时的缺省数据就是跨请求参数。
方法级别的参数不会被跨请求保持,比如第二次请求时,没有携带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

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

相关文章

  • 火车票抢票python代码公开揭秘!

    火车票抢票python代码公开揭秘!

    火车票抢票python代码公开揭秘!使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 从零开始学习Python与BeautifulSoup网页数据抓取

    从零开始学习Python与BeautifulSoup网页数据抓取

    想要从零开始学习Python和BeautifulSoup网页数据抓取?本指南将为你提供简单易懂的指导,让你掌握这两个强大的工具,不管你是初学者还是有经验的开发者,本指南都能帮助你快速入门并提升技能,不要错过这个机会,开始你的编程之旅吧!
    2024-01-01
  • 使用Python绘制圣诞树教程详解(附源代码)

    使用Python绘制圣诞树教程详解(附源代码)

    又是一年一度的圣诞节快到了,提到圣诞节,就不得不提圣诞树,所以本文我们将使用Python绘制一棵圣诞树,文中有详细的代码讲解,具有一定的参考价值,需要的朋友可以参考下
    2023-12-12
  • django之使用celery-把耗时程序放到celery里面执行的方法

    django之使用celery-把耗时程序放到celery里面执行的方法

    今天小编就为大家分享一篇django之使用celery-把耗时程序放到celery里面执行的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python  处理 Pandas DataFrame 中的行和列

    Python  处理 Pandas DataFrame 中的行和列

    这篇文章主要介绍了Python处理Pandas DataFrame中的行和列,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 详解python列表生成式和列表生成式器区别

    详解python列表生成式和列表生成式器区别

    这篇文章主要介绍了python(列表生成式/器),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • python3+PyQt5实现自定义流体混合窗口部件

    python3+PyQt5实现自定义流体混合窗口部件

    这篇文章主要为大家详细介绍了python3+PyQt5实现自定义流体混合窗口部件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 小结Python的反射机制

    小结Python的反射机制

    这篇文章主要介绍了Python的反射机制,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • Python图像处理PIL各模块详细介绍(推荐)

    Python图像处理PIL各模块详细介绍(推荐)

    这篇文章主要介绍了Python图像处理PIL各模块详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python实现小程序推送页面收录脚本

    python实现小程序推送页面收录脚本

    这篇文章主要介绍了python实现小程序推送页面收录脚本,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论