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(),可查看python之requests模块-request api进行了解。

由于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'},说明该参数没有在第一次请求后被保持住。

参考资料

最新文章

  1. 使用未付费的账号真机调试 iOS 程序,过几天后程序一打开就会闪退
  2. 深入instanceof
  3. nodejs学习心得
  4. cometd的js端代码
  5. yebis 和phyreengine的集成
  6. Unity实现相似于安卓原生项目的点击安卓返回button回到前一页的功能
  7. C文件操作之写入字符串到指定文件并在屏幕显示
  8. /root/.bashrc与/etc/profile的异同
  9. Effective C++_笔记_条款00_基本术语
  10. CSS3+HTML5特效5 - 震动的文字
  11. VR行业未来是会走向巅峰还是会归于落寞?
  12. 【原创】抓个Firefox的小辫子,围观群众有:Chrome、Edge、IE8-11
  13. Web Driver 8中定位方法 ——基于python语言
  14. nginx + gunicorn + flask项目发布
  15. Android为TV端助力 双缓存机制
  16. haproxy参数
  17. MFC Cstring转化为string
  18. java高级---->Thread之Phaser的使用
  19. html <a>标签介绍
  20. MySql环境变量配置

热门文章

  1. 使用Maven打包可运行jar和javaagent.jar的区别
  2. 谈一下python中的列表
  3. Oracle 分页查询的一个实例
  4. 使用递归计算1~n之间所有整数的和
  5. JavaEE在线就业班2.0-(1)-《博学谷》
  6. Android菜鸟进字节跳动,居然是看了这个......
  7. GO语言安装以及国内镜像
  8. 常见web中间件漏洞(一)IIS漏洞
  9. 用Vsftpd服务传输文件
  10. STM32—PID控制在直流电机中的应用