谷歌App Engine的JSON POST请求体
问题描述:
我不能从谷歌应用程序引擎的应用POST请求读取身体,每当我发送包含字符串冒号“:”谷歌App Engine的JSON POST请求体
这是我的请求处理类:
class MessageSync(webapp.RequestHandler):
def post(self):
print self.request.body
广告,这是我的测试脚本:
import httplib2
json_works = '{"works"}'
json_doesnt_work = '{"sux": "test"}'
h = httplib2.Http()
resp, content = h.request('http://localhost:8080/msg',
'POST',
json_works ,
headers={'Content-Type': 'application/json'})
print content
如果我使用可变json_works要求身体被打印出来,但如果我用json_doest_work我不会得到任何回应安慰。除了如果我打印整个请求对象,我得到这个:
POST /msg
Content-Length: 134
Content-Type: application/json
Host: localhost:8080
User-Agent: Python-httplib2/$Rev$
{"sux": "test"}
为什么黑客我不能只是身体? 谢谢!
答
在json_doesnt_work
的情况下,print
功能设定self.request.body
作为Response header
,因为它是在{key:value}
参数的一种形式。
{'status': '200', 'content-length': '0',
'expires': 'Fri, 01 Jan 1990 00:00:00 GMT',
'server': 'Development/1.0',
'cache-control': 'no-cache',
'date': 'Tue, 22 Feb 2011 21:54:15 GMT',
'{"sux"': '"test"}', <=== HERE!
'content-type': 'text/html; charset=utf-8'
}
您应修改您的处理程序是这样的:
class MessageSync(webapp.RequestHandler):
def post(self):
print ''
print self.request.body
甚至更好
class MessageSync(webapp.RequestHandler):
def post(self):
self.response.headers['Content-Type'] = "text/plain"
self.response.out.write(self.request.body)
+8
你永远不应该在请求处理程序中使用`print`。 +1为“更好”的建议。 – geoffspear 2011-02-22 20:38:29
请问您的实际代码省略结束单引号中json_doesnt_work`的'的定义或为那只是将代码隐藏到问题中的工件? – 2011-02-22 19:53:00