• Requests模块


    参考文档:http://docs.python-requests.org/en/latest/user/quickstart/ PS:纯手打翻译

      在自动化运维中涉及到数据发送的问题,发送的数据JSON序列化才能向服务器端发送完整的数据。为了解决这个问题需要对requests模块进行了解和认识。

      导入request模块

    import requests
    

      现在有了一个Response响应对象r,我们可以从这个对象中获取我们需要的信息

    r = requests.get('https://api.github.com/events')
    

      Requests提供的简单的API意味着HTTP的各种请求形式都是显而易见的。例如下面是如何创建一个HTTP POST请求

    r = requests.post('http://httpbin.org/post', data = {'key':'value'})
    

      下面是HTTP请求的各种形式:

     r = requests.put('http://httpbin.org/put', data = {'key':'value'})
     r = requests.delete('http://httpbin.org/delete')
     r = requests.head('http://httpbin.org/get')
     r = requests.options('http://httpbin.org/get')
    

      URLs中的规范

      如果你想向指定URL发送数据,这些数据形式必须是以键值对的形式发送。Requests模块允许以键值对形式的字符串发送参数,并且你需要使用关键字params

    >>> payload = {'key1': 'value1', 'key2': 'value2'}
    >>> r = requests.get('http://httpbin.org/get', params=payload)
    

      你可以这样查看对象r的URL

    >>> print(r.url)
    http://httpbin.org/get?key2=value2&key1=value1
    

      响应内容

    >>> import requests
    
    >>> r = requests.get('https://api.github.com/events')
    >>> r.text
    u'[{"repository":{"open_issues":0,"url":"https://github.com/...
    

      Requests模块会自动将从服务器获取的数据进行解码。大多数字符集会以unicode的形式无缝解码

      当你创建一个请求,Requests模块会基于HTTP头对响应进行编码。使用r.text可以查看编码文本内容。r.encoding查看编码,并且可以改变编码格式

    >>> r.encoding
    'utf-8'
    >>> r.encoding = 'ISO-8859-1'
    

      JSON响应内容

    Requsts模块有内置的JSON编码器,以便你可以进行JSON数据的处理

    >>> import requests
    
    >>> r = requests.get('https://api.github.com/events')
    >>> r.json()
    [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
    

      如果JSON解码失败,r.json()会抛出异常。例如如果响应204,或者如果响应包括无效的JSON,r.json()抛出ValueError:NO JSON object could be decoded

      较为复杂的POST请求

      如果你想以某种编码形式编码数据,比如HTML form。你只需要传递一个字典给data参数,你的字典会自动被以form形式编码

    >>> payload = {'key1': 'value1', 'key2': 'value2'}
    
    >>> r = requests.post("http://httpbin.org/post", data=payload)
    >>> print(r.text)
    {
      ...
      "form": {
        "key2": "value2",
        "key1": "value1"
      },
      ...
    }
    

      你可以传递一组元祖给data参数,当form有多个元素并且拥有相同的键时

    >>> payload = (('key1', 'value1'), ('key1', 'value2'))
    >>> r = requests.post('http://httpbin.org/post', data=payload)
    >>> print(r.text)
    {
      ...
      "form": {
        "key1": [
          "value1",
          "value2"
        ]
      },
      ...
    }
    

      如果你发送的数据不是form编码。你需要传递一个字符串而不是一个字典

    >>> import json
    
    >>> url = 'https://api.github.com/some/endpoint'
    >>> payload = {'some': 'data'}
    
    >>> r = requests.post(url, data=json.dumps(payload))
    

      不使用字典形式,你可以直接传递数据给json参数

    >>> url = 'https://api.github.com/some/endpoint'
    >>> payload = {'some': 'data'}
    
    >>> r = requests.post(url, json=payload)
    

      POST一个文件

    >>> url = 'http://httpbin.org/post'
    >>> files = {'file': open('report.xls', 'rb')}
    
    >>> r = requests.post(url, files=files)
    >>> r.text
    {
      ...
      "files": {
        "file": "<censored...binary...data>"
      },
      ...
    }
    

      你可以设置文件名,content_type和headers

    >>> url = 'http://httpbin.org/post'
    >>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
    
    >>> r = requests.post(url, files=files)
    >>> r.text
    {
      ...
      "files": {
        "file": "<censored...binary...data>"
      },
      ...
    }
    

      你可以发送字符串让服务器以文件的形式获取

    >>> url = 'http://httpbin.org/post'
    >>> files = {'file': ('report.csv', 'some,data,to,send
    another,row,to,send
    ')}
    
    >>> r = requests.post(url, files=files)
    >>> r.text
    {
      ...
      "files": {
        "file": "some,data,to,send\nanother,row,to,send\n"
      },
      ...
    }
    

      

  • 相关阅读:
    新人,请多指教,有个java小问题: bety a=300,强制类型转换,分析我的做法是否正确?谢谢
    生活健康
    小涛涛
    学习笔记(三)
    学习笔记(二)
    学习笔记(一)
    子元素宽度为100%,缩小窗口,父元素出现横向滚动条,滚动条向右拉,父元素右边有一块空白区域,没有背景颜色
    word-wrap:break-word和word-break:break-all的区别
    链接link使用href=“#”和href="##"的区别
    C#中在路径前使用 @ 的作用
  • 原文地址:https://www.cnblogs.com/c491873412/p/7620234.html
Copyright © 2020-2023  润新知