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
  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/baiyangcao/p/requests_basic.html
Copyright © 2011-2022 走看看