我一直在努力解决HTTP 500(错误的语法/字符串)错误,并且经过一些搜索后我无法在任何地方找到解决方案。我有一个嵌套的json PUT请求,我已经能够使用一些API工具(浏览器扩展和独立程序)工作,但当我尝试在Python的HTTP请求模块中使用json时,我继续获取返回的500错误代码。
我已经得到了其他更简单的jsons(例如data = {" RequestID":" 71865"})使用类似的代码来处理以下内容,这让我相信某些东西是没有得到正确的格式化,不幸的是,我对这个json-python的东西太新了,无法弄明白。我认为问题是因为python处理嵌套json的方式。
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import requests
import json
USER_NAME=u"myusername"
USER_PASS=u"mypassword"
PUT_URL="https://webservice.url.com/A/Path/To/Create/"
headers = {"Content-Type": "application/json"}
data = {
"ListOfFields": {
"Field": [
{"fieldname": "summary","value": "test summary"},
{"fieldname": "notes","value": "an example json PUT"},
{"fieldname": "user","value": "myuser"}
]
}
}
data_json = json.dumps(data)
payload = {'json_playload': data_json } ## I have tried with and without this line.
r = requests.put('{}'.format(PUT_URL), data=data_json, headers=headers, auth=(USER_NAME, USER_PASS), timeout=10)
# r = requests.put('{}'.format(PUT_URL), data=payload, headers=headers, auth=(USER_NAME, USER_PASS), timeout=10)
我已尝试将数据值放入引号,单行,并进行一些其他轻微调整,但我一直收到500错误。
print(r.status_code)
>> 500
如前所述,我已经使用GET和POST以及相同的Web服务器在python中使用类似的代码,但这个让我头疼!
答案 0 :(得分:8)
当将嵌套的JSON传递给data
param时,Requests库有一种讨厌数据的习惯。为避免这种情况,请将其传递到json
参数:
r = requests.put(PUT_URL, json=data_json, headers=headers, auth=(USER_NAME, USER_PASS), timeout=10)
有关详细信息,请查看类似问题的答案:Post JSON using Python Requests
答案 1 :(得分:0)
你想要打印你的JSON数据吗?试试这个:
data_json = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))