使用 PUT <key,value> 到 etcd 的请求导致空值

Using requests to PUT <key,value> into etcd results in empty value

我正在尝试使用请求 运行 一个简单的 PUT 并向 etcd 添加一个新对(我在本地有 运行ning)。我可以像这样直接调用 etcd 来做到这一点:

curl -X PUT http://127.0.0.1:2379/v2/keys/message -d value="Test Message"

但是,我认为与此等效的下面的代码似乎不起作用:

import requests
r = requests.put('http://127.0.0.1:2379/v2/keys/message', data = 'value=\"Test Message\"')
print(r.content)

上面的打印语句向我展示了这一点:

b'{"action":"create","node":{"key":"/message/35","value":"","modifiedIndex":35,"createdIndex":35}}\n'

因此 value 的值似乎由于某种原因为空。我已经为 data 参数尝试了多种格式,但没有成功。

首先,您可以通过r.request获取来自r的发送请求。然后你可以看到它有什么问题:

>>> r = requests.put("http://www.example.com", data="value=\"Test Message\"")
>>> r.request
<PreparedRequest [PUT]>
>>> r.request.url
'http://www.example.com/'
>>> r.request.body
'value="Test Message"'
>>> r.request.headers
{'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '20'}

其次,我认为你应该使用r = requests.put('http://127.0.0.1:2379/v2/keys/message', data={"value": "Test Message"})