困扰我2,3天的问题,求大拿指教,测试接口工作中,我用postman提交了一个请求,请求成功;但是当我生成python代码后,运行总是报错,返回500,msg是数据不存在,试了很多方法,请求参数装换为json都不行。附图如下:
header:
body:
请求结果:
之后我生成python代码:
在pycharm里面运行,报错如下:
我自己已经尝试了很多方式,比如data=payload改为json=payload;把参数格式从字典改为json字符串,都不行,只有请同行们支支招了。
困扰我2,3天的问题,求大拿指教,测试接口工作中,我用postman提交了一个请求,请求成功;但是当我生成python代码后,运行总是报错,返回500,msg是数据不存在,试了很多方法,请求参数装换为json都不行。附图如下:
header:
请求结果:
之后我生成python代码:
我自己已经尝试了很多方式,比如data=payload改为json=payload;把参数格式从字典改为json字符串,都不行,只有请同行们支支招了。
先说一下requests的json=还有data=的区别:
一、JSON
1.使用json参数,不管报文是str类型,还是dict类型,如果不指定headers中content-type的类型,默认是:application/json,str报文必须是json字符串。
二、DATA
1.使用data参数,报文是dict类型,如果不指定headers中content-type的类型,默认application/x-www-form-urlencoded,相当于普通form表单提交的形式,会将表单内的数据转换成键值对,此时数据可以从request.POST里面获取,而request.body的内容则为a=1&b=2的这种键值对形式。
注意:即使指定content-type=application/json,request.body的值也是类似于a=1&b=2,所以并不能用json.loads(request.body.decode())得到想要的值。
综上所述,两种参数的使用情况:
用data参数提交数据时,request.body的内容则为a=1&b=2的这种形式,用json参数提交数据时,request.body的内容则为'{"a": 1, "b": 2}'的这种形式
所以,postman生成的代码就不对,由于请求是application/json,所以一开始就应该是json=,同时将payload的所有东西以dict类型直接给requests的json参数
payload={'name':
{"data":
{"DWMC":"","WiHI":"","WH2":"","WH3":"",
"wH4":"m","DWLB":"","R0":"2022-07-05","NR4":"2","JTT":"2.测试07053",
"RQ2":"2022-07-0500:00:00","BJCD0s":"阿飞","RQ3":"2022-07-0500:00:00",
"SORT":"99","CRT_LEVEL":"0","CRT_COMPANYID":"610001","STATUS":"1",
"ISDELETED":"0","DATA_VER":"1","ZGDINMC":""
,"ZGDWID":"610001",
"NR3":"3","XFWFXW":"9,10,11","wFX":"2.-",
"RWID":"6100003667","rwwsszid":"128","isFlws":True,"runId":"6"
}
}
}
session = requests.session()
session.headers = headers
# 向测试站点发起请求
response = session.post("http://114.242.31.120:1888/api/blade-system/usual", json=payload)
url以及headers还有payload你改成自己的,如果有问题再联系我。
望采纳,谢谢