zoukankan      html  css  js  c++  java
  • requests快速入门

    Requests 是唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
    
    警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。
    
    Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。
    

    HTTP请求

    requests模块针对不同的HTTP请求提供的相应的顶层方法,
    包括:get, post, put, delete, headoptions

    >>> r = requests.get("http://httpbin.org/get")
    >>> r = requests.post("http://httpbin.org/post")
    >>> r = requests.put("http://httpbin.org/put")
    >>> r = requests.delete("http://httpbin.org/delete")
    >>> r = requests.head("http://httpbin.org/get")
    >>> r = requests.options("http://httpbin.org/get")
    

    这就是官方文档中所描述的纯天然、无需手工劳动的HTTP请求,
    然后在这个基础上可以根据不同的需求添加不同的关键字参数。

    传递URL参数 - params

    关键字参数params用于传递URL参数,以一个字典对象来提供键值对参数

    >>> payload = {'key1': 'value1', 'key2': ['value2', 'value3'], 'key3': None}
    
    >>> r = requests.get('http://httpbin.org/get', params=payload)
    >>> print(r.url)
    #http://httpbin.org/get?key1=value1&key2=value2&key2=value3
    

    这里注意两点:

    • 字典里值为None的键不会被添加到URL中
    • 字典里值为数组的键会被拆分成多个同时添加到URL中,如上例中的key2

    Post数据 - data, json, files

    一般在发起POST请求的时候会附加上一些要传送给服务器的数据,如表单,文件等。

    1. 对于表单形式的数据,只要简单的将一个字典传递给data参数

      >>> payload = {'key1': 'value1', 'key2': 'value2'}
      >>> r = requests.post("http://httpbin.org/post", data=payload)
      # 通过抓包可以发现发起的HTTP请求中BODY部分就是已经编码的表单数据
      # key1=value1&key2=value2
      

      注: data参数也可以接受一个字符串参数直接发布出去。

    2. 有些服务接受JSON编码格式的数据,可以使用json参数

      >>> r = requests.post("http://httpbin.org/post", json=payload)
      # 这是发送出去的HTTP请求中BODY部分就是JSON格式的字符串
      # {"key1": "value1", "key2": "value2"}
      
    3. 若是要上传文件数据,可以使用files参数

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

    自定义请求头 - headers

    通过headers参数提供的字典值自定义添加HTTP请求头信息,
    如服务要求JSON数据格式,要求请求Content-Typeapplication/json

    headers = {'Content-Type':'application/json'}
    r = requests.post(url, headers=headers, data=jsonstring)
    

    注: 其实这个例子里的问题可以使用json参数来解决,
    在使用json参数时会自动在请求头中添加Content-Type: application/json信息

    requests.post(url, json=jsonstring)
    

    Cookies - cookies

    要想要在发送请求时发送Cookies数据,可以使用cookies参数,
    可以使用requests.cookies.RequestCookieJar来构建Cookies

    >>> jar = requests.cookies.RequestsCookieJar()
    >>> jar.set('tasty_cookie', 'yum', site='httpbin.org', path='/cookies')
    >>> jar.set('gross_cookie', 'blech', site='httpbin.org', path='/elsewhere')
    >>> r = requests.get('http://httpbin.org/cookies', cookies=jar)
    

    超时时间 - timeout

    在请求时指定超时时间,若超过超时时间服务器没有响应,
    则会抛出requests.exceptions.Timeout错误

    HTTP响应

    请求方法返回的Response对象,可以通过响应码来确定响应状态,
    并获取不同格式的响应内容(以下默认rResponse类型对象)

    • r.status_code属性可以用来获取响应码,如:200,万恶的404等
    • 响应内容可以获取文本、二进制、JSON等格式:
      • r.text返回unicode格式的字符串响应内容,
        其内容编码可以通过r.encoding属性来设置
      • r.content返回二进制格式的响应内容
      • r.json把响应内容当做JSON字符串来处理,解码后返回JSON对象
    • r.cookes可以获取响应中要设置的cookies
  • 相关阅读:
    CAN总线布线规范
    使用make_ext4fs时报错,No such file or directory
    安装arm-2009q3交叉编译器后,执行No such file....
    Busybox下make menconfig报错处理!
    解决Markdown转为PDF后,尖括号不能正确显示问题。
    开发板与PC直连 交叉、直连网线做法
    BusyBox tftp使用
    STM32的flash数据页转存过程分析!
    c语言中log函数的使用!
    POJ 3667 Hotel
  • 原文地址:https://www.cnblogs.com/baiyangcao/p/requests_basic.html
Copyright © 2011-2022 走看看