Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python请求的REST post_Python_Python 2.7_Python Requests - Fatal编程技术网

使用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]'
),因此只接受字符串是不正确的。