Le jeudi 28 avril 2016 10:36:27 UTC+2, Rahul Raghunath a écrit : > 0 > down vote > favorite > > > I'm trying to create a simple http server with basic GET and POST > functionality. The program is supposed to GET requests by printing out a > simple webpage that greets a user and askes how he would rather be greeted. > When the user enters a greeting of his choice, the webpage should now greet > him as he had chosen. > > While GET seems to be working fine, POST is not. I tried debugging by > printing at every code execution and it seems to be getting stuck here: > > ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) > > I'll paste the code full code below, along with my terminal output. > > Code: > > from http.server import BaseHTTPRequestHandler, HTTPServer > import cgi > > > class webServerHandler(BaseHTTPRequestHandler): > > def do_GET(self): > try: > if self.path.endswith("/hello"): > self.send_response(200) > self.send_header('Content-type', 'text/html') > self.end_headers() > output = "" > output += "<html><body>" > output += "<h1>Hello!</h1>" > output += '''<form method='POST' > enctype='multipart/form-data' action='/hello'><h2>What would you like me to > say?</h2><input name="message" type="text" ><input type="submit" > value="Submit"> </form>''' > output += "</body></html>" > self.wfile.write(output.encode(encoding = 'utf_8')) > print (output) > return > > if self.path.endswith("/hola"): > self.send_response(200) > self.send_header('Content-type', 'text/html') > self.end_headers() > output = "" > output += "<html><body>" > output += "<h1>¡ Hola !</h1>" > output += '''<form method='POST' > enctype='multipart/form-data' action='/hello'><h2>What would you like me to > say?</h2><input name="message" type="text" ><input type="submit" > value="Submit"> </form>''' > output += "</body></html>" > self.wfile.write(output.encode(encoding = 'utf_8')) > print (output) > return > > except IOError: > self.send_error(404, 'File Not Found: %s' % self.path) > > def do_POST(self): > try: > self.send_response(201) > print("Sent response") > self.send_header('Content-type', 'text/html') > print("Sent headers") > self.end_headers() > print("Ended header") > ctype, pdict = > cgi.parse_header(self.headers.getheader('content-type')) > print("Parsed headers") > if ctype == 'multipart/form-data': > fields = cgi.parse_multipart(self.rfile, pdict) > messagecontent = fields.get('message') > print("Receiver message content") > output = "" > output += "<html><body>" > output += " <h2> Okay, how about this: </h2>" > output += "<h1> %s </h1>" % messagecontent[0] > output += '''<form method='POST' > enctype='multipart/form-data' action='/hello'><h2>What would you like me to > say?</h2><input name="message" type="text" ><input type="submit" > value="Submit"> </form>''' > output += "</body></html>" > print(output) > self.wfile.write(output.encode(encoding = 'utf_8')) > print ("Wrote through CGI") > except: > pass > > > def main(): > try: > port = 8080 > server = HTTPServer(('', port), webServerHandler) > print ("Web Server running on port", port) > server.serve_forever() > except KeyboardInterrupt: > print (" ^C entered, stopping web server....") > server.socket.close() > > if __name__ == '__main__': > main() > > Terminal Output: > > Web Server running on port 8080 > 127.0.0.1 - - [28/Apr/2016 13:28:59] "GET /hello HTTP/1.1" 200 - > <html><body><h1>Hello!</h1><form method='POST' > enctype='multipart/form-data' action='/hello'><h2>What would you like me to > say?</h2><input name="message" type="text" ><input type="submit" > value="Submit"> </form></body></html> > 127.0.0.1 - - [28/Apr/2016 13:29:09] "POST /hello HTTP/1.1" 201 - > Sent response > Sent headers > Ended header > > As you can see, the POST function does not seem to go beyong the parse_header > command. I cannot figure this out, and any help would be usefu!
Hi, It's generally not considered good practise to silently ignore exceptions in a try/except where the except clause is just : except: pass If you remove the try/except in do_POST you will see this interesting error message : AttributeError: 'HTTPMessage' object has no attribute 'getheader' -- https://mail.python.org/mailman/listinfo/python-list