2013-02-20 5 views
14

Mam problem z odczytaniem żądania POST z bottle.py.Czytanie ciała POST z bottle.py

Wysłane żądanie zawiera tekst w treści. Możesz zobaczyć, jak się to robi tutaj: 29: https://github.com/kinetica/tries-on.js/blob/master/lib/game.js.

Możesz również zobaczyć, jak jest on czytany na kliencie opartym na node tutaj na linii 4: https://github.com/kinetica/tries-on.js/blob/master/masterClient.js.

Jednak nie udało mi się naśladować tego zachowania na moim kliencie opartym na bottle.py. docs mówią, że mogę odczytać surowe ciało z obiektu podobnego do pliku, ale nie mogę uzyskać danych ani za pomocą pętli for na request.body, ani za pomocą metody request.body 's readlines.

Obsługuję żądanie w funkcji ozdobionej za pomocą @route('/', method='POST'), a żądania przychodzą poprawnie.

Z góry dziękuję.


EDIT:

Kompletny skrypt jest:

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

myślałem, że to było potrzebne, aby przewinąć 'obiekt StringIO', ale to nie jest konieczne. Czy możesz dodać funkcje Pythona do swojego pytania? –

+0

Oczywiście. Zaktualizowałem odpowiedź. Dzięki, @ A.Rodas –

+0

Skąd wiadomo, że wnioski przychodzą poprawnie? Jakie są dane wyjściowe i/lub informacje zwrotne dla kodu, który tu pokazałeś? –

Odpowiedz

13

Próbowałaś prosty postdata = request.body.read()?

Poniższy przykład pokazuje, czytając zamieszczone dane w formacie RAW za pomocą request.body.read()

drukuje również do pliku logu (nie klienta) surowej zawartości ciała.

Aby wyświetlić dostęp do właściwości formularza, dodałem do klienta "nazwę" i "nazwisko".

Do testów użyłem curl klienta z linii poleceń:

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

Kod, który pracuje dla mnie:

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

to się komplikuje, ponieważ POST pobiera niektóre pliki ... –