Swagger上面找一个post接口,如图。同样可以先在swagger上面try it out先验证下本接口效果
经试验,参数如下,加上正确的token,可以正确查询到结果:
{
"id": 283,
"name": "",
"orderBy": 2,
"pageNo": 1,
"pageSize": 20,
"queryTotal": true,
"sortString": "id"
}
接下来,我们通过python来验证下该接口:
一开始是这样写的:
import requests
if __name__ == '__main__':
url = 'http://XXX.XX/api/item/v1/attribute/search'
attributeNamePageSearchModel = {
"id": 283,
"name": "",
"orderBy": 2,
"pageNo": 1,
"pageSize": 20,
"queryTotal": true,
"sortString": "id"
}
header={"Authorization": "f0fe02af-dca6-47e7-8f09-07c53d2bfc61"}
response=requests.post(url,data =attributeNamePageSearchModel,headers=header)
print(attributeNamePageSearchModel)
print(response.url)
print(response.text)
发现"queryTotal": true, 这一行的true有红色报错;尝试改成'true'和1,运行结果依然不对;在Swagger上面也改成'true'和1,相同报错;后经过搜索,知道python里面需要改成True才行!
改成True之后运行,不是应该有的结果:
那一定是我们参数不对,接着探索,发现需要加上Content-Type;于是修改header一行:
header={"Authorization": "f0fe02af-dca6-47e7-8f09-07c53d2bfc61","Content-Type":"application/json"}
再运行,发现还是上述无效请求。。em,继续看,是不是json格式的问题,于是试着转化下,header上面加一行,同时上面还需要import json:
#python数据类型转换为json类型(json.dumps())
attributeNamePageSearchModel = json.dumps(attributeNamePageSearchModel)
再运行,ok,是想要的结果:
备注:上述有2条语句其实有2种写法,1或2都可以:
1.
attributeNamePageSearchModel = json.dumps(attributeNamePageSearchModel)
response=requests.post(url,data =attributeNamePageSearchModel,headers=header)
或者2.
response = requests.post(url, json=attributeNamePageSearchModel, headers=header)
总结:
1.json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[];
所以想要在post请求中使用data关键字来传递json格式的字符串,首先得把dict转为string(用到json.dumps());
或者也可以直接使用json关键字直接传递,在传递时会自行进行编码为string类型(不需要json.dumps())