接口自动化:2. requests第三方库
学习前提,先复习下面向对象的知识点。
----------
1. 安装requests:pip install requests
2. 了解常用方法:
requests.get() 传入url,params
requests.post() 传入url,data用于传参,json也用于传参【是用data还是json可以看content_type值;也可用json.dumps()进行转化,详细见下】
requests.put()
requests.delete()
requests.request() 可以发送所有类型的请求:get,post,put,delete
data和json传参以及content-type的关系如下:
1. data传参:报文是dict类型,那么默认content-type:/x-www-form-urlencoded
datachuancan:报文是str类型,那么默认content_type:text/plain
2. json传参:报文是dict类型,那么默认content-type:application/json
总结:data可以传纯键值对的dict(非嵌套的dict),也可以传str格式。(如果是嵌套的字典,就需要使用json.dumps()把嵌套字典转化为json字符串传参)
json可以传任何形式的dict(包括嵌套的dict)
json.loads() 把json字符串转化为dict格式
json.dumps() 把dict格式转化为json字符串
3. requests模块返回的response对象详解
res.json() 获得返回的json对象,字典格式数据
res.text() 获得返回的字符串格式的数据
res.content() 获得返回的bytes字节类型的数据
res.status_code() 返回状态码
res.reason() 返回状态信息
res.cookies 返回cookie信息
res.headers 返回响应头
res.request xxx 返回请求的数据,如:请求头,请求参数...
----------------------------------------------------------------------------------------
实践代码如下:
import requests
#定义类
class TestRequest:
#定义属性--略
#定义方法名--实现一个get请求:获取首页header接口请求
def test_get_header(self):
url = 'https://test-api.vistopia.com.cn/api/v1/home/header'
params = {
'api_token':'',
'req_time':1641441350,
'sign':'fa6a58c19fdfe6454e1de26e41e98fd1'
}
res = requests.get(url=url,params=params)
print(res.json())
#定义方法名--实现一个post请求:
def test_post_cancel_subscriptions(self):
url = 'https://test-api.vistopia.com.cn/api/v1/auth/post-login'
#根据抓包看content_type类型,判断是用json还是data传参
json = {
'password':123456,
'phone': 15600780168,
'sign': '4224d2d3bfd288b7727b5e88771eaa91',
'api_token':'',
'area_code':86,
'req_time':1642669481
}
res = requests.post(url=url,json=json)
print(res.json())
#调用类的方法
if __name__ == '__main__':
TestRequest().test_get_header()
TestRequest().test_post_cancel_subscriptions()
------------------------------------------------------------------------------------------
关于接口关联,比如第二个接口会用到第一个接口返回的值
设置全局变量,类变量 如a=‘’
第一个接口的值进行赋值:类名.变量 = res.json()【‘字段名’】
第二个接口直接使用如:access token = “+变量名.a”
-------------------------------------------------------------------------------------------
其实:不管是get还是post还是put和delete,都是调用的requests.request方法,而requests.request方法调的是session.request方法。
请求四要素:请求方式;请求路径,方式传参,请求头【若跑不通,则判断是否需要cookie鉴权 或 session鉴权】
method 请求方式
url 请求路径
params=none get方式传参
data=none post方式传参
headers=none 请求头
cookies=none 请求cookie
files=none 文件上传
代码: