2013-02-20 5 views
14

bottle.py으로 POST 요청을 읽는 데 문제가 있습니다.bottle.py로 POST 본문 읽기

보낸 요청에 본문에 일부 텍스트가 있습니다. 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에서 for 루프를 사용하거나 request.bodyreadlines 메소드를 사용하여 데이터를 가져올 수는 없습니다.

@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) 
+0

나는 그것이'StringIO' 객체를 되 감을 필요가 있다고 생각하지만, 필요가 없습니다. 질문에 파이썬 함수를 추가 할 수 있습니까? –

+0

물론. 답변을 업데이트했습니다. 감사합니다. @ A.Rodas –

+0

요청이 올바르게 도착했다는 것을 어떻게 알 수 있습니까? 여기에 표시된 코드의 출력 및/또는 추적은 무엇입니까? –

답변

13

당신은 postdata = request.body.read() 간단한 시도 했습니까?

다음의 예는 또한 로그 파일 신체의 (안 클라이언트) 원시 콘텐츠를 인쇄 request.body.read()

를 사용하여 원시 형식으로 게시 된 데이터를 읽는 보여줍니다.

양식 속성 액세스를 표시하기 위해 클라이언트에 "name"과 "surname"을 반환했습니다.

는 테스트를 위해, 나는 명령 줄에서 컬 클라이언트를 사용 :

$ 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가 일부 파일을 첨부 할 때 복잡해집니다 ... –

관련 문제