@Mamol27

Как отправить массив в post запросе python?

Здравствуйте, пытаюсь воспользоваться rest api одного ресурса, и не получается оправить массив, там где он должен быть.
Запрос
query_pattern = {
    "key": "apikey",
    "username": "admin",
    "password": "admin",
    "action": "",
    "entity_id": "",
    "items": ""
}


def send_contract_json(contract_list):
    items = []
    for e in contract_list:
        item = {"field_454": e[0], "field_455": "-----"}
        items.append(item)

    query_pattern["action"] = "insert"
    query_pattern["entity_id"] = 42
    query_pattern["items"] = items
    print(query_pattern)

    response = requests.post(url, query_pattern)
    print(json.loads(response.text))


Ответ:

Вывод:
{'items': [{'field_454': 1, 'field_455': '-----'}, {'field_454': 2, 'field_455': '-----'}, {'field_454': 3, 'field_455': '-----'}, {'field_454': 4, 'field_455': '-----'}, {'field_454': 5, 'field_455': '-----'}, {'field_454': 6, 'field_455': '-----'}, {'field_454': 7, 'field_455': '-----'}, {'field_454': 8, 'field_455': '-----'}, {'field_454': 9, 'field_455': '-----'}, {'field_454': 10, 'field_455': '-----'}, {'field_454': 11, 'field_455': '-----'}, {'field_454': 12, 'field_455': '-----'}], 'entity_id': 42, 'action': 'insert', 'key': 'apikey', 'username': 'admin', 'password': 'admin'}
{'error_message': 'items is not array', 'status': 'error', 'error_code': ''}

Описание rest api на php:
https://www.rukovoditel.net/ru/api.html

Вопрос у кого ошибка, у меня или на стороне сервера?
  • Вопрос задан
  • 2351 просмотр
Решения вопроса 1
alternativshik
@alternativshik
Там у них есть http_build_query, так что советую попробовать как-то так.
import urllib.parse

data = urllib.parse.urlencode(query_pattern)
requests.post(url, data=data)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Fearta
@Fearta
Добрый день, не решили вопрос? очень интересно. пол года назад пытался решить но нечего не вышло. ( Привлек 2 программистов, и даже создателя конструктора "Руководитель" ) но ответа нет(
Ответ написан
@gerladeno
Добрый день!
Сам ненадолго на этом споткнулся, но вроде как json.dumps решает проблему, нет?
...
payload = [{'id': 1, 'value': 11}, {'id': 2, 'value': 22}, {'id': 3, 'value': 33}]
data = json.dumps(payload)
result = requests.post(url, data=data)
Ответ написан
Комментировать
kharchishin
@kharchishin
Разработчик CRM Руководитель
Передавать массив не обязательно через POST, можно и через GET

import requests

params = {
	  'key':'****',
          'username':'admin',
          'password':'****',
          'action':'select',
          'entity_id':28,
          'select_fields':'242,247,275,270,271,272,273,285,286,293,294,346,394,395,396,397,398,399,400,401,480,481',
          'limit': 0,
         ############################### 
         'filters[242]': '2023-02-01,2023-02-02',
          ##############################
        
          
        }

def get_data(params):
  r = requests.post('http://www.******/api/rest.php',data=params)
  r = r.json()
  return r
  
x = get_data(params)
print(len(x['data'])) #Кол-во записей

x['data']
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы