Python发送含列表与对象的API POST请求遇500错误如何解决?
解决POST请求中
links[0].XYZ格式参数的构造问题 Chrome Network面板里看到的links[0].XYZ这类格式,是表单数据的数组嵌套写法,不是JSON结构。你之前用列表嵌套字典的方式构造数据,会被序列化成不符合后端预期的格式,这就是返回500错误的核心原因。
正确的参数构造方式
直接把links[0].XYZ、links[0].Change作为字典的键来构造表单数据:
data = { 'Token': settings.TOKEN, 'version': 'abcd', # 注意:这里要加字符串引号,原代码中abcd未加引号会引发变量未定义错误 'password': 'SomePassword', 'links[0].XYZ': 'DC-DC-02-01', 'links[0].Change': 4321 }
保持原请求方式发送表单数据即可:
response = self.api.post(url=url, form=data, ignore_https_errors=True)
错误原因分析
- 格式不匹配:你之前用
links: [{'xyz': '...', 'Change': '...'}]的结构,请求库会将其序列化为JSON数组,或者转成links[0][xyz]这类键名,和后端预期的links[0].XYZ格式完全不符,导致后端解析失败。 - 大小写问题:Chrome里的参数是大写
XYZ,你原代码用的是小写xyz,后端若对参数名大小写敏感,会直接忽略该参数,引发逻辑错误。 - 语法错误:原代码中
version: abcd未给abcd加字符串引号,会被Python当成变量处理,若该变量未定义会直接抛出异常,即使定义了也可能不符合后端预期的字符串类型。
内容的提问来源于stack exchange,提问作者Tal Angel
相关产品推荐
相关产品推荐

