我正在尝试使用Python请求发出PUT请求。我看过其他几篇文章,据我所知,我做得对。但是我在服务器上的JSON没有更新(尽管响应可以得到200 ok)。
我很肯定URL是正确的,并且接受GET或PUT(无POST)。我能够从URL成功获取。
这是r.json()返回的JSON(发出GET请求后):
{u'items': [{u'name': u'cm_yarn_container_usage_job_pool', u'value': u'yarn'},
{u'name': u'cm_yarn_container_usage_job_user', u'value': u'yarn'},
{u'name': u'cm_yarn_enable_container_usage_aggregation',
u'value': u'true'},
{u'name': u'hadoop_secure_web_ui', u'value': u'true'},
{u'name': u'hdfs_service', u'value': u'hdfs'},
{u'name': u'yarn_core_site_safety_valve',
u'value': u'long string here'},
{u'name': u'yarn_fs_scheduled_allocations',
u'value': u'{"long": "unicode string here"}'},
{u'name': u'yarn_nodemanagers_healthy_thresholds',
u'value': u'{"warning":80,"critical":75}'},
{u'name': u'yarn_service_cgroups', u'value': u'true'},
{u'name': u'yarn_service_lce_always', u'value': u'true'},
{u'name': u'zookeeper_service', u'value': u'zookeeper'}]}
我可以这样提取我想要的字段:
>>> x['items'][7]['value']
u'{"warning":80,"critical":75}'
现在,我正在尝试将此unicode词典更新为:u'{"warning":79,"critical":75}'}
我正在使用Python 2请求模块(服务器上允许使用Python2)。这是我尝试在服务器上更新JSON的方法:
url = "http://nodename:7180/api/v6/clusters/<cluster-name>/services/yarn/config"
id , password = '', ''
payload = {u'items': [{u'name': u'yarn_nodemanagers_healthy_thresholds', u'value': u'{"warning":79,"critical":75}'}]}
r = requests.put(url, json=payload, auth=(id, password))
此请求看起来正确吗?我尝试了许多变体,但仍然没有更新服务器上的JSON。谢谢。