Python requests调用API校验失败但Postman请求正常如何解决
问题原因
你调用POST请求时使用data参数传递请求体,data参数会将Python字典序列化为表单格式(application/x-www-form-urlencoded),和你声明的application/json请求头格式不匹配,后端无法正确解析参数,因此判定必填字段缺失。
修复方案
将requests.post中的data参数替换为json参数即可,json参数会自动将字典序列化为JSON格式的请求体,符合接口要求。另外使用json参数时,requests会自动填充正确的Content-Type请求头,你也可以选择省略手动设置headers的步骤,简化代码。
修改后完整代码
import requests payload={ "sort" : "tendersTotal.desc" , "filter" : { "keyword" : { "searchedText" : "" , "searchedFields" : [] } , "tenderLocationsOfActivity" : [] , "grantLocationsOfActivity" : [] , "grantSectorsOfActivity" : [] , "tenderSectorsOfActivity" : [] , "name" : "" , "types" : [] , "numberOfEmployees" : [] , "legalResidences" : [] } , "pageSize" : 1 , "pageNr" : 1 } headers = { 'Content-Type' : 'application/json;charset=UTF-8' } # 仅将原参数data替换为json即可 r = requests.post("https://www.developmentaid.org/api/frontend/donors/search" , json=payload, headers=headers) print(r.json())
内容的提问来源于stack exchange,提问作者Talib Daryabi
相关产品推荐
相关产品推荐

