2010-01-23 12 views
18

मैं एक पायथन 2.6 ऐप को एक पायथन 3 ऐप में परिवर्तित कर रहा हूं और मैं सर्वर से फंस रहा हूं। मैंने इसे जीईटी अनुरोधों को ठीक करने में कामयाब रहा है लेकिन पोस्ट मुझे दूर करने के लिए जारी है। यहां 2.6 में से शुरू किया गया है जो काम करता है लेकिन 3.x में सामान्य सर्वर POST अनुरोधों को संभाल नहीं करता है। पायथन मैनुअल के पढ़ने से मुझे लगता है कि मुझे इसके बजाय एक CGI सर्वर क्लास का उपयोग करना चाहिए और उस निर्देशिका में स्क्रिप्ट को मैप करना चाहिए। मुझे ऐसा करने की ज़रूरत नहीं है लेकिन मुझे कोई और रास्ता नहीं मिल रहा है। क्या मैं कुछ भूल रहा हूँ?पायथन 3 http.server POST उदाहरण

def do_POST(self): 
    ctype, pdict = cgi.parse_header(self.headers.get('content-type')) 
    if ctype == 'multipart/form-data': 
     query = cgi.parse_multipart(self.rfile, pdict) 

    self.send_response(301) 

    self.end_headers() 
    upfilecontent = query.get('upfile') 
    print("filecontent", upfilecontent[0]) 
    self.wfile.write("<HTML>POST OK.<BR><BR>"); 
    self.wfile.write(upfilecontent[0]); 
+0

सामान्य सर्वर सामान्य रूप से पायथन 3 में पोस्ट अनुरोधों को संभाल नहीं करता है, यह पाइथन 2 में करता है? क्या आप समझ सकते हैं कि समस्या क्या है? –

+0

हाँ, यह एक do_post() फ़ंक्शन को लागू नहीं करेगा जबकि Python2 से एक होगा। पाइथन दस्तावेज में इसे कैसे दूर किया जाए और इसके लिए गुगलिंग के बारे में कोई ठोस कोड उदाहरण नहीं हैं, इससे कोई मदद नहीं मिली है। – Teifion

उत्तर

15

पोकिंग के बाद और कुछ और घंटों के गुगलिंग के बाद मुझे निम्नलिखित कार्य मिल गए हैं।

def do_POST(self): 
    length = int(self.headers['Content-Length']) 
    post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8')) 
    # You now have a dictionary of the post data 

    self.wfile.write("Lorem Ipsum".encode("utf-8")) 

मुझे आश्चर्य है कि यह कितना आसान था।