2017-08-10 42 views
1

我正在嘗試使用json格式提交POST請求數據以創建使用Crowd API的用戶。如何通過python 2.4中的urllib2提交發布數據?

這裏是代碼片段:

url = 'http://crowdserver/crowd/rest/usermanagement/1/user' 
payload = '{"name": "sampleuser", "password": {"value": "secret"}, "active": true, "first-name": "Sample", "last-name": "User","display-name": "Sample User", "email": "[email protected]"}' 
req = urllib2.Request(url, payload) 
req.add_header('Content-type','application/json') 
req.add_header("Accept", "application/json") 
res = urllib2.urlopen(req) 
output = resp.read() 
print output 
print resp.code 

我得到以下輸出:

Bad Request 
Error code returned is 400 

我想這可能也許是一個編碼問題,所以替代的有效載荷有:

payload = json.dumps({"name": "sampleuser", "password": {"value": "secret"}, "active": true, "first-name": "Sample", "last-name": "User","display-name": "Sample User", "email": "[email protected]"}) 

其中收益:

NameError: name 'true' is not defined 

所以它看起來像"active": true是不是在一個可接受的格式。

如果我添加雙引號,如"active":"true"我得到一個TypeError; TypeError: not a valid non-string sequence or mapping object

更新

所以類型錯誤確實是由active屬性值設置爲True解決,但事實證明了400錯誤是由於invalid user data, for example missing password or the user already exists讀作the user already exists回來了 - 我覺得很奇怪的錯誤對於無效輸入和現有用戶共享相同的錯誤代碼。

+3

如果將其更改爲「True」,該怎麼辦? –

+1

真的好奇 - 這樣一箇舊的Python版本的用例是什麼? – JoshuaRLi

+0

您的示例代碼通過http –

回答

0

在這一行:

payload = '{"name": "sampleuser", "password": {"value": "secret"}, "active": true, "first-name": "Sample", "last-name": "User","display-name": "Sample User", "email": "[email protected]"}'

變化..., "active": true, ......, "active": True, ...

Python的True/False是區分大小寫的。

+0

好點,但我得到同樣的錯誤。我要通過CURL來試試這個,看看我能否弄清楚。 – kaizenCoder