如何通过python 2.4中的urllib2提交发布数据?

问题描述:

我正在尝试使用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 –

在这一行:

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