Python - Обновление массива JSON REST

Я новичок в Python, я пытаюсь написать скрипт, который будет принимать IP-адрес, который я предоставляю, и обновлять массив, который я извлекаю из JSON RESTful API. Я могу вытащить данные из массива нормально. Вот как выглядит мой код (прошу прощения за внешний вид кода)

import requests
import json
import sys

pool_name = sys.argv[1]
add_node = sys.argv[2]

url = 'https://<stingray RESTApi>:9070/api/tm/1.0/config/active/pools/' + pool_name
jsontype = {'content-type': 'application/json'}
client = requests.Session()
client.auth = ('<username>', '<password>')
client.verify = 0

response = client.get(url)
pools = json.loads(response.content)
nodes = pools['properties']['basic']['nodes'] 

Теперь я смотрю на использование этого

client.put(url, <I am stuck>, headers = jsontype)

На данный момент я достиг пределов моего текущего ноу-хау Python(как я только начал изучать в последние несколько дней). Я также рассмотрел использование чего-то подобного для получения собранных данных, добавления к массиву, а затем пытался их PUT.

updatepool['properties']['basic']['nodes'].append(add_node)

Когда я печатаю updatepool, я вижу, что то, что мне нужно, работает, но снова PUT, помещая его в массив, поставило меня в тупик.

Любая помощь могла бы быть полезна.

Спасибо

ОБНОВЛЕНИЕ: Вот обновление моего кода, получая 400 ответ от API

#!/usr/bin/python

import requests 
import json 
import sys 

pool_name = sys.argv[1]
#add_node = sys.argv[2]
add_node = u'10.10.10.1:80'

url = 'https://<uri>:9070/api/tm/1.0/config/active/pools/' + pool_name  
jsontype = {'content-type': 'application/json'}
client = requests.Session()  
client.auth = ('<username>', '<password')  
client.verify = 0  

response = client.get(url)  
pools = json.loads(response.content)
nodes = pools['properties']['basic']['nodes']
data = nodes
data.append(add_node)

print client.put(url,json.dumps(data), headers=jsontype)

2 ответа

Решение

Из документов

печать запросов.doc отправляет запрос PUT. Возвращает: класс:Response объект.

:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.

так client.put(url, {'key':'value'}, headers = jsontype) работает.

Теперь вам нужно знать, какой ключ принимает этот URL: предположим, что он принимает "узел" и ключ, который вы можете использовать.

client.put(url, {'node':add_node}, headers = jsontype) 

или же

client.put(url, {'node':updatepool['properties']['basic']['nodes']**[0]**}, headers = jsontype)

отправить первый узел

Согласно документации

put(url, data=None, **kwargs)
     Sends a PUT request. Returns Response object.

     Parameters:    
         url – URL for the new Request object.
         data – (optional) Dictionary, bytes, or file-like object to send in the body of the Request.
         **kwargs – Optional arguments that request takes.

Вы можете дать 'диктwithlist` (массив).

Другие вопросы по тегам