如何通过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
回来了 - 我觉得很奇怪的错误对于无效输入和现有用户共享相同的错误代码。
在这一行:
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
是区分大小写的。
好点,但我得到同样的错误。我要通过CURL来试试这个,看看我能否弄清楚。 – kaizenCoder
如果将其更改为“True”,该怎么办? –
真的好奇 - 这样一个旧的Python版本的用例是什么? – JoshuaRLi
您的示例代码通过http –