#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)