Python POST调用API返回Internal Server Error,SQL生成JSON参数硬编码正常求助
问题原因
你通过SQL查询生成的jRecord本身就是已经序列化完成的JSON格式字符串,而requests.post的json参数接收的是Python原生字典/列表对象,会自动对传入内容做JSON序列化。你直接传入JSON字符串时,requests会对字符串做二次序列化,导致最终发送的请求体被额外添加了引号转义,结构不符合服务端要求,因此返回500错误。
你硬编码相同内容能成功,是因为硬编码时传入的是Python字典对象,序列化后的结构符合接口要求。
修复方法
任选以下一种方案修改即可:
- 方案一:将JSON字符串转为Python字典后再传入
json参数
首先导入json模块,修改jRecord赋值逻辑:
import json # 其他原有代码不变 jRecord = json.loads(row[0])
- 方案二:直接将序列化好的JSON字符串传入
data参数
修改post请求代码,把json参数换成data:
y = requests.post(url, data = jRecord , headers = headers , verify=True)
修改后重新运行即可正常调用接口。
内容的提问来源于stack exchange,提问作者Maged Awad
相关产品推荐
相关产品推荐

