2015-08-31 5 views
10

का उपयोग कर POST अनुरोध से फ़ाइल प्राप्त करें मैं POST संदेश प्राप्त करने के लिए नीचे दिए गए कोड को चला रहा हूं। मैं फ़ाइल कैसे प्राप्त करूं (POST के साथ भेजा गया) और मैं HTTP स्थिति कोड 200 ठीक से कैसे प्रतिक्रिया करूं?पायथन के बेसएचटीटीपीएसवर

#!/usr/bin/env python 

import ssl 
import BaseHTTPServer, SimpleHTTPServer 
from BaseHTTPServer import BaseHTTPRequestHandler 

class HttpHandler(BaseHTTPRequestHandler): 
    def do_POST(self): 
     print "got POST message" 
     # how do I get the file here? 
     print self.request.FILES 


httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), HttpHandler) 
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./server.pem', server_side=True) 
httpd.serve_forever()  



$curl -X POST -d @../some.file https://localhost:4443/resource --insecure 

AttributeError: 'SSLSocket' object has no attribute 'FILES'

उत्तर

1

यह

request.FILES 

शब्दकोश में आम तौर पर उपलब्ध है

+0

शायद Django में, लेकिन यह Django नहीं है। –

8

BaseHTTPRequestHandler पहली पंक्ति और http अनुरोध तो आप करने के लिए बाकी को खुला छोड़ देते के शीर्ष लेख पर कार्रवाई करेंगे। आप कर्ल आदेश आपके द्वारा निर्दिष्ट देखते हुए 200 OK

के साथ प्रतिक्रिया देने का उपयोग कर BaseHTTPRequestHandler.rfile

आप self.send_response(200) उपयोग कर सकते हैं अनुरोध के शेष के पढ़ने की जरूरत है आपके प्रश्न का उत्तर चाहिए निम्नलिखित:

class HttpHandler(BaseHTTPRequestHandler): 
    def do_POST(self): 
     content_length = int(self.headers['Content-Length']) 
     file_content = self.rfile.read(content_length) 

     # Do what you wish with file_content 
     print file_content 

     # Respond with 200 OK 
     self.send_response(200) 

नोट कि आपके कर्ल कमांड में -d @../some.file का उपयोग करके आप कह रहे हैं "यह एक एएससीआई फाइल है, ओह और न्यूलाइन और कैरिज रिटर्न को बाहर निकालें", इस प्रकार आप जिस फ़ाइल का उपयोग कर रहे हैं और उस डेटा के बीच अंतर हो सकता है जिसमें आप प्राप्त करते हैं अनुरोध। आपका कर्ल कमांड एक HTML फॉर्म फ़ाइल-अनुकरण का अनुकरण नहीं करता है जैसे पोस्ट अनुरोध।

संबंधित मुद्दे