Как ПУБЛИКОВАТЬ данные JSON с помощью запросов Python?
Мне нужно отправить JSON с клиента на сервер. Я использую Python 2.7.1 и simplejson. Клиент использует запросы. Сервер - CherryPy. Я могу ПОЛУЧИТЬ жестко запрограммированный JSON с сервера (код не показан), но когда я пытаюсь ОТПРАВИТЬ JSON на сервер, я получаю "400 неверных запросов".
Вот мой клиентский код:
data = {'sender': 'Alice', 'receiver': 'Bob', 'message': 'We did it!'} data_json = simplejson.dumps(data) payload = {'json_payload': data_json} r = requests.post("http://localhost:8080", data=payload)
Вот код сервера.
classRoot(object):
def__init__(self, content): self.content = content print self.content # this works
Оказывается, мне не хватало информации в заголовке. Работает следующее:
import requests
url = "http://localhost:8080" data = {'sender': 'Alice', 'receiver': 'Bob', 'message': 'We did it!'} headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} r = requests.post(url, data=json.dumps(data), headers=headers)
Ответ 3
В запросах 2.4.2 (https://pypi.python.org/pypi/requests) поддерживается параметр "json". Нет необходимости указывать "Content-Type". Таким образом, сокращенная версия:
Какой параметр между data / json / files вам нужно использовать, зависит от заголовка запроса с именем Content-Type (вы можете проверить это с помощью инструментов разработчика вашего браузера).
Когда Content-Type есть application/x-www-form-urlencoded, используйте data=:
requests.post(url, data=json_obj)
Когда Content-Type есть application/json, вы можете либо просто использовать json=, либо использовать data= и установить Content-Type самостоятельно: