2013-02-20 74 views
14

我無法通過bottle.py閱讀POST請求。閱讀POST body with bottle.py

發送的請求在其正文中包含一些文本。您可以在第29行看到它是如何製作的:https://github.com/kinetica/tries-on.js/blob/master/lib/game.js

您還可以在第4行上看到如何在基於node的客戶端上讀取它: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'對象,但它沒有必要。你可以將Python函數添加到你的問題嗎? – 2013-02-20 20:44:12

+0

當然。我已經更新了答案。謝謝,@ A.Rodas – 2013-02-20 20:57:51

+0

您如何知道請求正確到達?這裏顯示的代碼的輸出和/或回溯是什麼? – 2013-02-20 22:15:46

回答

13

你嘗試簡單postdata = request.body.read()

下面的例子顯示使用request.body.read()

還將輸出到日誌文件(而不是客戶端)身體的原始內容讀取原始格式發佈的數據。

爲了顯示錶單屬性的訪問權限,我添加了返回「姓名」和「姓氏」給客戶端。

爲了進行測試,我用捲曲客戶端的命令行:

$ 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變得很複雜 – 2014-06-03 07:12:37