Чтение тела 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)