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.
Вы можете дать 'диктwith
list` (массив).