Чтение тела POST с бутылкой.

У меня возникли проблемы с чтением запроса 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 говорит, что я могу читать исходное тело с файлоподобным объектом, но я не могу получить данные, не используя для цикла на request.body или при использовании метода request.body readlines.

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

Спасибо заранее.


EDIT:

Полный script:

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)

Ответ 1

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

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

Он также печатает в исходном содержимом тела журнала (а не на клиенте).

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

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

$ 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)