这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
复习回顾
Python 面向对象的高级语言。我们在前面已经学习了Python也支持对网络请求模块。
本期,我们将学习底层使用的urllib3模块的第三方网络请求Python模块-requests,Let's go~
1. requests 模块概述
requests 模块在其官网上大大写着“让HTTP服务人类”。因此,requests模块也是秉成着这一原则,提供更加便捷的HTTP请求方法。
我们的代码中使用HTTP请求时候,如果操作不当的话会存在安全漏洞、代码冗余等问题
-
requests 模块特点
-
采用底层内部采用urllib3模块进行封装,使用更加人性化便捷
- 我们可以通过查看源代码看到requests模块的确是导入urllib3模块的
-
允许用户之间方式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请求更加方便。
以上是本期内容,欢迎大佬们点赞评论,下期见~
近期评论