• 会话对象

会话对象能够跨请求保持某些参数。

它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。

所以如果向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。

会话对象具有主要的 Requests API 的所有方法。

包含在会话中的数据都能直接使用

跨请求保持cookie:

>>> import requests
>>> s = requests.session()
>>> s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
<Response [200]>
>>> r = s.get("http://httpbin.org/cookies")
>>> print(r.text)
{
"cookies": {
"sessioncookie": "123456789"
}
}

会话也可用来为请求方法提供缺省数据。

这是通过为会话对象的属性提供数据来实现的:

>>> s = requests.session()
>>> s.headers.update({'test': 'true'})
>>> s.headers.update({'test1': 'false'})
>>> s.get('http://httpbin.org/headers', headers={'test1': 'true'})
<Response [200]>
>>> s.headers
{'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'test': 'true', 'test1': 'false'}

test和test1的数据都会被发送

任何传递给请求方法的字典都会与已设置会话层数据合并,方法层的参数会覆盖会话的参数。

方法级别的参数也不会被跨请求保持

>>> s = requests.session()
>>> r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
>>> print(r.text)
{
"cookies": {
"from-my": "browser"
}
} >>> r = s.get('http://httpbin.org/cookies')
>>> print(r.text)
{
"cookies": {}
}

获取的cookie是第一个不是第二个

如果要手动为会话添加 cookie,就使用 Cookie utility 函数 来操纵 Session.cookies

会话还可以用作前后文管理器:

>>> with requests.session() as s:
... s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
...
<Response [200]>

这样就能确保with区块退出后会话能被关闭,即使发生了异常也一样。

如果要省略字典参数中一些会话层的键。只需在方法层参数中将那个键的值设置为None ,那个键就会被自动省略掉。

  • 请求与响应对象

>>> r = requests.get('http://httpbin.org/get')
>>> r.headers #服务器返回的响应头部信息
{'Connection': 'keep-alive', 'Server': 'meinheld/0.6.1', 'Date': 'Fri, 09 Feb 2018 13:09:33 GMT', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'X-Powered-By': 'Flask', 'X-Processed-Time': '0.000726938247681', 'Content-Length': '265', 'Via': '1.1 vegur'}
>>> r.request.headers #发送到服务器的请求的头部信息
{'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
  • SSL证书验证

SSL验证默认是开启的,如果证书验证失败,requests会抛出SSLError的错误

可以通过verify参数来解决

给verify传入CA_BUNDLE文件的路径,或者包含可信任CA证书文件的文件夹路径

>>> requests.get('https://httpbin.org/get', verify='/path/to/certfile')

也可以把证书包含在会话中

s = requests.session()
s.verify = '/path/to/certfile'

如果verify设为文件夹路径,文件夹必须通过OpenSSL提供的c_rehash工具处理

还可以通过REQUESTS_CA_BUNDLE环境变量定义可信任CA列表

verify参数仅用于主机证书,对于私有证书,可以传递一个 CA_BUNDLE 文件的路径给verify,也可以设置REQUEST_CA_BUNDLE环境变量

verify的默认值为True,也可以将verify设置为False,requests就会忽略对SSL证书的验证

>>> requests.get('https://www.baidu.com/', verify=False)
<Response [200]>

Python模块-requests(二)的更多相关文章

  1. python模块介绍二。

    全局变量 全局变量 python在一个.py文件内部自动添加了一些全局变量 print(vars()) #查看当前的全局变量 执行结果: {'__package__': None, '__loader ...

  2. 扩展Python模块系列(二)----一个简单的例子

    本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...

  3. python模块(二)

    一.json模块 作用: 用于[字符串]和 [python基本数据类型] 间进行转换 Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding. encoding ...

  4. Python模块入门(二)

    一.模块的循环导入问题 在python工程中,由于架构不当,可能会出现模块间互相引用的情况.这时候需要通过一些方法来解决这个问题 1.重新设计架构,解决互相引用的关系. 2.把import语句放置在模 ...

  5. Python模块-requests模块使用

    写在前面 这篇文章是我照着廖雪峰python网站学习的,大致内容差不多,多了我一丢丢的自己的想法.如果发现有什么不对的话请及时联系我.qq:472668561 参考链接:https://www.lia ...

  6. python模块学习(二)

    configparser模块 软件常见文档格式如下: [DEFAULT]ServerAliveInterval = 45Compression = yesCompressionLevel = 9For ...

  7. Python模块-requests(一)

    requests不是python自带的,使用前需要安装 发送请求 HTTP请求类型有GET,POST,PUT,DELETE,HEAD和OPTIONS 使用requests发送请求的方法如下: > ...

  8. Python 模块(二)

    1 logging 模块 logging有两种的配置的方式,configure.logger 1.1 config方式 import logging ''' 日志的配置:config模式 只能选择在屏 ...

  9. python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块

    4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...

随机推荐

  1. 如何在官网下载java JDK的历史版本

    如何在官网下载java JDK的历史版本 http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html 如何在官网下载java JDK的 ...

  2. .vimrc .bashrc

    怕丢了,赶快保存! .bashrc # switch caps lock with escxmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'sudo ...

  3. [原创]java WEB学习笔记01:javaWeb之tomcat的安装和配置

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. [原创] hadoop学习笔记:重新格式化HDFS文件系统

    所谓的重新格式化HDFS文件系统,实际意味着重新的创建一个HDFS文件系统.也就是说,必须将先前的已经有的文件系统配置删除.如下: 笔者采用的是最小化安装 这个是core-site.xml配置 这个是 ...

  5. [java]final关键字、finally关键字与finalize()方法

    final关键字: final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能出于两个原因:设计或者效率. final可以修饰变量.方法和类. 一.final变量 一个既是static又是 ...

  6. GetWindowRect和GetClientRect比较学习

    一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? ...

  7. Luogu-1381 单词背诵

    先将n个单词插入哈希表,记录左右端点,每次右端点往后移动,读入一个新的单词并记录下它的哈希值,如果这个单词之前没出现过那么更新\(ans\)和\(minl\),如果左端点的单词出现了不止一次则可以往右 ...

  8. java深入探究03

    1.Tomcat 我们的浏览器其实就是一个Socket客户端能接受Socket服务端发来的消息 一:市面上的web服务器 javase的规范,包含IO流,线程,集合,socket编程.... WebL ...

  9. java入门了解15

    1.批处理文件(bat) 简单的说,批处理的作用就是自动的连续执行多条命令 .编写bat处理文件可以使用记事本的方式: 常见批处理文件的命令: echo 表示显示此命令后的字符 tiltle 设置窗口 ...

  10. JSP<jsp:forward>与<%@ include%>

    JSP<jsp:forward>与<%@ include%><jsp:include> <jsp:forward file="forwardTo_p ...