我正在学习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>¡hola <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()
答案 0 :(得分:0)
您的do_POST
函数没有正确缩进,它现在在课外,让它与do_GET
函数对齐,它应该没问题。