zoukankan      html  css  js  c++  java
  • Python模块-requests(二)

    • 会话对象

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

    它也会在同一个 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]>
    
  • 相关阅读:
    锋利的jQuery复制粘贴(一)
    使用photoshop以及markman进行快速重构页面的几个步骤
    线程间同步之 semaphore(信号量)
    关于C#中Thread.Join()的一点理解
    无废话WCF入门教程一[什么是WCF]
    Oracle function注释
    throw new DataException("检查服务器是否存在失败:" + ex);
    C# 将数据集以excel的形式输出
    .net 安装remoting服务
    任务计划 每日删除设定目录内的文件(包括文件夹)
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8436881.html
Copyright © 2011-2022 走看看