2013-02-20 3 views
14

У меня возникли проблемы с чтением запроса POST с bottle.py.Чтение POST тела с bottle.py

Отправленный запрос имеет некоторый текст в его теле. Вы можете увидеть, как это делается в строке 29: https://github.com/kinetica/tries-on.js/blob/master/lib/game.js.

Вы также можете посмотреть, как он читается на базе клиента node здесь, в строке 4: https://github.com/kinetica/tries-on.js/blob/master/masterClient.js.

Однако, я не смог воспроизвести это поведение на моем bottle.py клиентах. docs говорят, что я могу читать сырое тело с файлоподобным объектом, но я не могу получить данные, не используя цикл for на request.body, и не используя метод request.bodyreadlines.

Я обрабатываю запрос в функции, украшенной @route('/', method='POST'), и запросы поступают правильно.

Заранее спасибо.


EDIT:

Полный сценарий:

from bottle import route, run, request 

@route('/', method='POST') 
def index(): 
    for l in request.body: 
     print l 
    print request.body.readlines() 

run(host='localhost', port=8080, debug=True) 
+0

Я думал, что это было необходимо, чтобы перемотать объект 'StringIO', но не обязательно. Не могли бы вы добавить функции Python к вашему вопросу? –

+0

Конечно. Я обновил ответ. Спасибо, @ A.Rodas –

+0

Как вы знаете, что запросы поступают правильно? Каков результат и/или трассировка для кода, который вы здесь показали? –

ответ

13

Пробовали ли вы просто postdata = request.body.read()?

Следующий пример показывает чтение данных, размещенных в сыром виде с использованием request.body.read()

Он также выводит в лог-файл (а не к клиенту) необработанного тела.

Чтобы показать доступ к свойствам формы, я добавил клиенту возврат «имени» и «фамилии».

Для тестирования я использовал локон клиент из командной строки:

$ curl -X POST -F name=jan -F surname=vlcinsky http://localhost:8080 

Код, который работает для меня:

from bottle import run, request, post 

@post('/') 
def index(): 
    postdata = request.body.read() 
    print postdata #this goes to log file only, not to client 
    name = request.forms.get("name") 
    surname = request.forms.get("surname") 
    return "Hi {name} {surname}".format(name=name, surname=surname) 

run(host='localhost', port=8080, debug=True) 
+0

это осложняется тем, что POST получает прикрепленные файлы ... –

Смежные вопросы