2014-11-25 48 views
2

我一直在努力解决HTTP 500(错误的语法/字符串)错误太久,并且在执行一些搜索之后,我无法在任何地方找到解决方案。我有一个嵌套的json PUT请求,我已经可以使用一些API工具(浏览器扩展和独立程序)工作,但是当我尝试在Python的HTTP请求模块中使用json时,我一直得到500返回错误代码。格式化嵌套的json以用于Python请求

我已经得到了其他更简单的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

你会被罚款披露网址 - 这将有助于我很快回答这个问题,谢谢 – 2014-11-25 13:18:29

回答

1

的要求图书馆在嵌套JSON传递到data PARAM时重挫数据的坏习惯。为了避免这种情况,它传递到json PARAM代替:

r = requests.put(PUT_URL, json=data_json, headers=headers, auth=(USER_NAME, USER_PASS), timeout=10) 

有关详细信息,看看这个回答类似的问题:Post JSON using Python Requests