不受支持的方法POST,简单的python服务器

时间:2016-04-12 17:26:04

标签: python http server

我正在学习Udacity的完整堆栈开发,我们必须使用http.server创建一个简单的python服务器。

我在python中编写了一个小程序,它可以很好地执行GET请求。 我的帖子有问题。 服务器在本地主机端口8080上运行。我给出的任何POST请求都返回501不支持的方法错误。 我主要是内核设备驱动程序等,我不习惯调试这样的错误。

该程序正在创建一个简单的服务器,它在GET请求上打印一个问候消息。 http:localhost:8080/hello 它还为用户提供输入新问候消息的表单,但输入后,给出501错误。 POST方法应该显示与用户输入的问候语相同的页面。我用CGI来完成这件事。

我被困住了! 此外,如果有人可以提供如何调试这些事情的链接/提示,我将不胜感激!是否有像我可以阅读的日志文件或什么?

该计划:

from http.server import BaseHTTPRequestHandler, HTTPServer
import cgi


class WebServerHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        if self.path.endswith("/hello"):
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            output = ""
            output += "<html><body>"
            output += "<h2> How's it going?</h2>"
            output += "<form method = 'POST' enctype='multipart/form-data' action='/hello'> 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>&#161hola  <a href = /hello> Back to English! </a>"
            output += "<form method = 'POST' enctype='multipart/form-data' action='/hello'> 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

        else:
            self.send_error(404, 'File Not Found:')


def do_POST(self):
        try:
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            ctype, pdict = cgi.parse_header(
                self.headers.getheader('content-type'))
            if ctype == 'multipart/form-data':
                fields = cgi.parse_multipart(self.rfile, pdict)
                messagecontent = fields.get('message')
            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>"
            self.wfile.write(output.encode(encoding = "utf_8"))
            print (output)
        except:
            pass




def main():
    try:
        port = 8080
        server = HTTPServer(('', port), WebServerHandler)
        print ("Web Server running on port: 8080")
        server.serve_forever()
    except KeyboardInterrupt:
        print (" ^C entered, stopping web server....")
        server.socket.close()

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

您的do_POST函数没有正确缩进,它现在在课外,让它与do_GET函数对齐,它应该没问题。