Вам необходимо установить заголовок типа контента:
data = {"data" : "24.3"}
data_json = json.dumps(data)
headers = {'Content-type': 'application/json'}
response = requests.post(url, data=data_json, headers=headers)
Если я установлю url
на http://httpbin.org/post
, этот сервер вернет мне то, что было опубликовано:
>>> import json
>>> import requests
>>> import pprint
>>> url = 'http://httpbin.org/post'
>>> data = {"data" : "24.3"}
>>> data_json = json.dumps(data)
>>> headers = {'Content-type': 'application/json'}
>>> response = requests.post(url, data=data_json, headers=headers)
>>> pprint.pprint(response.json())
{u'args': {},
u'data': u'{"data": "24.3"}',
u'files': {},
u'form': {},
u'headers': {u'Accept': u'*/*',
u'Accept-Encoding': u'gzip, deflate, compress',
u'Connection': u'keep-alive',
u'Content-Length': u'16',
u'Content-Type': u'application/json',
u'Host': u'httpbin.org',
u'User-Agent': u'python-requests/1.0.3 CPython/2.6.8 Darwin/11.4.2'},
u'json': {u'data': u'24.3'},
u'origin': u'109.247.40.35',
u'url': u'http://httpbin.org/post'}
>>> pprint.pprint(response.json()['json'])
{u'data': u'24.3'}
Если вы используете requests
версию 2.4.2 или новее, вы можете оставить кодировку JSON библиотеке; он также автоматически установит для вас правильный заголовок Content-Type. Передайте данные для отправки в формате JSON в аргумент ключевого слова json
:
data = {"data" : "24.3"}
response = requests.post(url, json=data)
person
Martijn Pieters
schedule
18.12.2012
data = {"data": 24.3}
(примечание: число с плавающей запятой, а не строку)? Я не знаю WCF, но вот другая интерпретация:string test(string data)
может означать, что ваш сервер ожидает в качестве входных данных единственную строку (data_json = '"something"'
(примечание: это строка Python, содержащая текст json, представляющий строку json)), и это не так. не ожидаю объект json. Строго говоря, application / json должно представлять либо объект json (например,data_json = '{"a", 1}'
), либо массив json (например,data_json = '[1,2,3]'
), поэтому неправильно принимать только строку. - person jfs   schedule 19.12.2012