在试用digitalocean v2 api时,我遇到了以下行为:
curl -X POST "https://api.digitalocean.com/v2/droplets" \
-d'{"name":"t002","region":"ams3","size":"512mb","image":"debian-7-0-x64","ssh_keys":[123]}' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
工作良好,液滴被创造出来。
现在,当我从python调用它时:
json_values = {'name': 's002', 'region': 'ams3', 'size': '512mb', 'image': 'debian-7-0-x64', 'ssh_keys': [123]}
data = urllib.parse.urlencode(json_values)
data = data.encode("utf-8")
try:
req = urllib.request.Request(create_droplets_url, data)
req.add_header("User-Agent", uagent) # set custom user agent
req.add_header("Authorization", BearerToken) # set custom user agent
response = urllib.request.urlopen(req)
我回来了:HTTP Error 422: Unprocessable Entity
没有进一步的信息。我在python方面做错了什么吗?泰铢
其他信息: 我发现问题出在ssh_密钥上。如果我去掉那个元素,一切都会好的。
我收到了同样的错误,并意识到这是由于服务器端验证失败与您的post数据。
解决方案:
使用
requests.post
而不是urllib.request.Request
,这样您就可以得到服务器端422
错误代码的准确错误消息。示例代码:
谢谢:)
为什么要用url编码数据?这不是curl版本所做的。改为转储到JSON:
相关问题 更多 >
编程相关推荐