ОТПРАВЬТЕ список Python в Node.js сервер ожидает полезную нагрузку, состоящую из массива, содержащего JSON

#python #json #post #python-requests

#python #json #Публикация #python-запросы

Вопрос:

Я пытаюсь отправить POST-запрос (на Python) на сервер, который ожидает массив, содержащий JSON. Кажется, я не могу правильно отформатировать данные. Как я могу отформатировать следующую полезную нагрузку, чтобы она вела себя как массив JavaScript для Node.js сервер?

POST /api/adduser/

Node.js ожидаемая полезная нагрузка:

 [ 
    {'user':'jon','email':'email@gmail.com'}, 
    {'user':'jon2','email':'email2@gmail.com'} 
]
 

Мой текущий код:

 import requests
import json

payload = 
[
   {
       'user': 'hello',
       'email': 'hello@gmail.com'
   },
   {
       'user': 'helloAgain',
       'email': 'helloAgain@gmail.com'
   }
]

res = requests.post('http://localhost/api/users', data=json.dumps(payload))

#res -> 400 error -> reason:  "wrong json format - must be an array"
 

Комментарии:

1. Что произойдет, если вы попытаетесь закодировать данные в формате json?

2. Брайан — это то, что я пробовал изначально, но я получаю сообщение об ошибке: «неправильный формат json — должен быть массив». Сервер, который обрабатывает POST, — это nodejs.

Ответ №1:

Ваша ожидаемая полезная нагрузка неверна (это не JSON). Избавьте себя от множества головных болей и используйте json модуль:

 import json
res = requests.post('http://localhost/api/users', data=json.dumps(payload))
 

Комментарии:

1. тебьорн — Это не работает. Сообщение обрабатывается сервером nodejs, ожидающим массив.

2. Затем вам нужно либо установить соответствующие заголовки Content-Type: application/json (хотя я думал, что запросы делают это автоматически), и / или вызвать JSON.parse на стороне узла..

3. Отличное предложение, хотя у меня нет доступа к коду сервера. Я пишу код на python для интеграции с внешним приложением.

Ответ №2:

Вот решение:

POST /api/adduser/

Node.js ожидаемая полезная нагрузка:

 [ 
    {'user':'jon','email':'email@gmail.com'}, 
    {'user':'jon2','email':'email2@gmail.com'} 
]
 

Мой текущий код:

 import requests
import json

payload = 
[
   {
       'user': 'hello',
       'email': 'hello@gmail.com'
   },
   {
       'user': 'helloAgain',
       'email': 'helloAgain@gmail.com'
   }
]

jsonPayload = json.dumps(payload)

headers = {'Content-Type': 'application/json'}

res = requests.post('http://localhost/api/users', data=jsonPayload, headers=headers)