使用Python请求的REST post
为什么这个简单的代码不将数据发布到我的服务中:使用Python请求的REST post,python,python-2.7,python-requests,Python,Python 2.7,Python Requests,为什么这个简单的代码不将数据发布到我的服务中: import requests import json data = {"data" : "24.3"} data_json = json.dumps(data) response = requests.post(url, data=data_json) print response.text 我的服务是使用WCF开发的,如下所示: [OperationContract] [WebInvoke(Method = "POST", UriT
import requests
import json
data = {"data" : "24.3"}
data_json = json.dumps(data)
response = requests.post(url, data=data_json)
print response.text
我的服务是使用WCF开发的,如下所示:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/test", ResponseFormat =
WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json)]
string test(string data );
注意:如果删除输入参数
数据
一切正常,可能是什么问题。您需要设置内容类型标题:
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'}
如果您使用的是请求
版本2.4.2或更高版本,则可以将JSON编码留给库;它也会自动为您设置正确的内容类型标题。将要作为JSON发送的数据传入JSON
关键字参数:
data = {"data" : "24.3"}
response = requests.post(url, json=data)
早些时候尝试了
内容类型
,但运气不佳。我的WCF有什么问题吗。。如果我删除输入参数,我可以调用URL。我不知道是什么问题。我想我找到了问题所在。它与{“data”:“24.3”}
一起使用。。由于某些原因,我需要将其作为一个字符串括起来,这是我的请求通过时的字符串。。像这样“{data:24.3}”。。有人想解释一下原因吗?@GJSJ:那么你不再发送JSON对象,而是发送一个JSON字符串。这将是一个服务器端问题,与Python或请求无关
@GJSJ:只需使用http://httpbin.org/post
作为URL;它使用JSON结构进行响应,包括一个JSON
键,以显示如果发送JSON,它会收到什么JSON。同意您的评论服务器需要一个JSON字符串,因此我需要传递一个JSON字符串而不是一个对象。谢谢,干杯!!当你说它不起作用时,你到底是什么意思?从上一个“注释”来看,它听起来不仅仅是“忽略我的数据”(因为没有数据“一切正常”),但到底发生了什么?我想我找到了问题所在。它与{“数据”:“24.3”}一起使用。。由于某些原因,我需要将其作为一个字符串括起来,这是我的请求通过时的字符串。。像这样“{data:24.3}”。。有人愿意解释原因吗?您是否尝试过data={“data”:24.3}
(注意:浮点,而不是字符串)?我不知道WCF,但这里有另一种解释:string test(string data)
可能意味着您的服务器需要一个字符串作为输入(data_json=''something'
(注意:它是一个包含表示json字符串的json文本的Python字符串),而不需要json对象。严格来说,“application/json”必须表示json对象(例如,data\u json='{“a”,1}'
)或json数组(例如,data\u json='[1,2,3]'
),因此只接受字符串是不正确的。