Pythonrequests模块浅析复习回顾1.re

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

复习回顾

Python 面向对象的高级语言。我们在前面已经学习了Python也支持对网络请求模块。

  • urllib模块对基本的url请求提供request、error、parse、robot.txt模块方法
  • urllib3模块提供线程安全池管理和代理服务相关方法

本期,我们将学习底层使用的urllib3模块的第三方网络请求Python模块-requests,Let's go~

1. requests 模块概述

requests 模块在其官网上大大写着“让HTTP服务人类”。因此,requests模块也是秉成着这一原则,提供更加便捷的HTTP请求方法。

image.png

我们的代码中使用HTTP请求时候,如果操作不当的话会存在安全漏洞、代码冗余等问题

  • requests 模块特点

    • 采用底层内部采用urllib3模块进行封装,使用更加人性化便捷

      • 我们可以通过查看源代码看到requests模块的确是导入urllib3模块的

      image.png

    • 允许用户之间方式HTTP链接请求,比urllib2模块操作更加简洁

    • 提供keep-alive和连接池,自动化保持连接

    • 支持cookie保持会话

    • 支持文件上传、自动响应内容编码

  • requests 模块获取

    • 方式一:使用pip直接下载requests模块

      pip install requests
      复制代码
    • 方式二:使用git工具进行clone下载

      git clone git://github.com/kennethreitz/requests.git
      复制代码
  • requests 模块使用

    我们在代码中需要使用import导入requests模块

    import requests
    复制代码

2. requests 相关方法

requests 模块是使用Apache2 licensed 许可证的HTTP库,在用户手册中我们可以看到提供主要的方法如下

方法 作用
requests.get(url) 发送get请求
requests.post(url) 发送post请求
requests.put(url) 发送put请求
requests.delete(url) 发送delete请求
requests.head(url) 发送head请求
requests.options(url) 发送options请求

🚩requests 模块提供请求方法字段说明

字段 说明
url 网络请求链接
data 请求的数据,数据可以是字典、元组
param 以字典形式传URL参数
header HTTP请求头
files 多重编码的文件
allow_redirects 重定向
timeout 超时

🚩requests 模块对象属性说明

字段 说明
text 服务器返回的内容
encoding 加密格式
content 请求回应的内容
json Json解码回应的内容
raw 服务器原始回应的内容(二进制)
status_code 响应状态码
raise_for_status 异常状态码
headers 响应头信息
cookie 响应的cookie信息

3. requests 上手步骤

requests 模块底部使用urllib3模块,对请求的方法进行高度封装,我们来总结一下操作步骤:

  • 导入requests模块

    import requests
    复制代码
  • 定义一个requests对象,如调用get请求掘金网站

    r = requests.get("https://juejin.cn/user/211521683863847/posts")
    复制代码
  • 查询请求响应中相关信息

    print("status_code",r.status_code)
    print("content",r.content.decode("utf-8"))
    print("headers['Content-type']:",re.headers['Content-type'])
    复制代码

4. 小试牛刀

根据requests模块提供的请求方法,我们来实现一个工作场景:

给了一个思否接口,让你进行测试:

接口:/api/xxxbusinessManager/dev/clientctrl
接口参数:

{
    "clientId": "AABBCC_1",                   //client的ID
    "action": "restart"                       // 可选值:restart,upgrade
}
复制代码

接口请求方法:POST
请求头:

参数名称 参数值 是否必选
Content-Type application/json

首先,我们按照接口请求方式,创建一个do_post方法

def  do_post(ip,api,data):

    headers = {"Content-Type": "application/json"}

    url = "http://"+ip+api

    print (url)

    try:
        r = requests.post(url,headers = headers,data = json.dumps(data),timeout= 10)
        print(r.status_code)
        print(r.content.decode("utf-8"))

    except requests.exceptions.ConnectionError:
        requests.status_code = "Connection refused"
    except requests.exceptions.ReadTimeout:
        requests.status_codes = "Read timed out"
复制代码

测试步骤:

data = {"clientId": "Z21051446-0A00011","action": "restart"}
api_pose = "/api/xxxbusinessManager/dev/clientctrl"
ip = "172.19.94.58"
do_post(ip,api_pose,data)
复制代码

总结

本期,我们对requests模块请求方法进行及相关属性进行学习,requests 模块是基于urllib3进行封装,让HTTP请求更加方便。

以上是本期内容,欢迎大佬们点赞评论,下期见~