requests
注意!
该组件需要和 pytest
组合使用
官网:https://requests.readthedocs.io/en/latest/
pip install requests
常用方法
下面是requests库中发送请求的四种方式,这四种方式会返回一个Response
对象
requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.delete(url, **kwargs)
requests.put(url, data=None, **kwargs)
这四种方法都调用了下面的方法
# method的实参是一个字符串
requests.request(method, url, **kwargs)
而这个方法又调用了如下方法
sessions.Session().request(method=method, url=url, **kwargs)
查看源码,发现该函数有很多参数,参数具体含义可参考如下内容(建议去看源码中的注释):
method, #请求方式
url, #请求路径
params=None, #get请求参数
data=None, #post或put请求参数
headers=None, #请求头
cookies=None, #cookie
files=None, #文件上传,上传的文件
auth=None, #鉴权
timeout=None, #超时处理
allow_redirects=True, #是否允许重定向
proxies=None, #设置代理
hooks=None, #钩子
stream=None, #文件下载
verify=None, #证书验证
cert=None, #CA证书
json=None, #post请求传参的一种方式
json参数
可以将post请求的参数,转换为json,然后通过json参数进行请求
files参数
根据对应的接口文档,查看需要传递的参数名是什么
例如接口参数名为uploadFile
参考如下代码
def test_upload_file(self):
data = {"uploadFile": "当前机器上的文件绝对路径"}
# 如果接口要求文件字节流的话,使用如下方式
data = {"uploadFile": open("当前机器上的文件绝对路径", "rb")}
url = "请求地址"
response = requests.post(url, files=data)
print(response.json())
Response
返回的response对象的类文件,在与sessions.py
文件同级的models.py
文件里
print(resp.text) #响应的文本信息
print(resp.json()) #响应的json格式
print(resp.content) #响应的字节内容
print(resp.status_code) #响应的状态码
print(resp.reason) #响应的状态信息
print(resp.reason) #响应的cookie
print(resp.cookies) #响应的编码格式
print(resp.encoding) #响应的编码格式
print(resp.headers) #请求头
print(resp.request.请求数据) #请求信息
解析返回值
响应回来的值大致分为两种,一种是json,还有一种是纯文本,纯文本一般情况下都是html网页
解析纯文本,可以使用正则表达式进行解析
解析json可参考如下内容
JsonPath
import jsonpath
import requests
# https://www.mxnzp.com/api/jokes/list?page=1&app_id=不再提供请自主申请&app_secret=不再提供请自主申请
class TestApi:
def test_jokes(self):
params = {
"app_id": "你不会以为我会写在这吧",
"app_secret": "想弄的话自己去注册,反正也是免费的",
"page": 1
}
url = "https://www.mxnzp.com/api/jokes/list"
resp = requests.get(url, params=params)
joke_list = jsonpath.jsonpath(resp.json(), "$.data.list..content")
for joke in joke_list:
print(joke, end="\n\n")
if __name__ == '__main__':
TestApi.test_jokes()
关于JsonPath表达式的语法:
符号 | 描述 |
---|---|
$ | 表示json的根节点,表示根节点下的所有数据 |
. | 表示子节点,如 $.store 表示根节点下的store节点下的所有数据 |
.. | 可实现递归搜索,如 $..title 表示搜索json中所有key为title属性的值 |
相关博客:https://juejin.cn/post/6850418109473783816
Github地址:https://github.com/json-path/JsonPath
Json序列化
该方法用于将json对象(字典)转换为json字符串
json.dumps(json_obj)
该方法用于将json字符串转换为json对象(字典)
json.loads(json_obj)