2013-02-20 53 views
14

के साथ पोस्ट बॉडी पढ़ना मुझे bottle.py के साथ एक POST अनुरोध पढ़ने में परेशानी हो रही है।बोतल.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') से सजाए गए फ़ंक्शन में अनुरोध को प्रबंधित कर रहा हूं, और अनुरोध सही तरीके से पहुंचते हैं।

अग्रिम धन्यवाद।


संपादित करें:

पूरा स्क्रिप्ट है:

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

बेशक। मैंने जवाब अपडेट किया है। धन्यवाद, @ एरोडास –

+0

आप कैसे जानते हैं कि अनुरोध सही तरीके से आते हैं? आपके द्वारा यहां दिखाए गए कोड के लिए आउटपुट और/या ट्रेसबैक क्या है? –

उत्तर

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 को कुछ फाइलें संलग्न होती हैं ... –