Чтение тела 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
клиент В документах говорится, что я могу читать необработанное тело с помощью файлового объекта, но я не могу получить данные, используя цикл for request.body
ни с помощью request.body
"s readlines
метод.
Я обрабатываю запрос в функции, украшенной @route('/', method='POST')
и запросы приходят правильно.
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Полный сценарий:
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)
2 ответа
Ты пробовал просто 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)
Простой скрипт для обработки POST-данных. POSTed-данные записываются в терминал и возвращаются клиенту:
from bottle import get, post, run, request
import sys
@get('/api')
def hello():
return "This is api page for processing POSTed messages"
@post('/api')
def api():
print(request.body.getvalue().decode('utf-8'), file=sys.stdout)
return request.body
run(host='localhost', port=8080, debug=True)
Скрипт для размещения данных JSON в скрипт выше:
import requests
payload = "{\"name\":\"John\",\"age\":30,\"cars\":[ \"Ford\", \"BMW\",\"Fiat\"]}"
url = "localhost:8080/api"
headers = {
'content-type': "application/json",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)