Google App Engine тело запроса json - PullRequest
4 голосов
/ 22 февраля 2011

Я не могу прочитать тело из запроса POST в приложении механизма приложений Google, когда отправляю строку, содержащую двоеточие ":"

Это мой класс обработчика запросов:

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"}

Почему, черт возьми, я не могу получить только тело? Спасибо!

1 Ответ

11 голосов
/ 22 февраля 2011

В случае 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...