Python3 http.server POST示例

22 投票
1 回答
19054 浏览
提问于 2025-04-15 18:21

我正在把一个Python2.6的应用程序转换成Python3的版本,但在服务器这块遇到了麻烦。我已经成功处理了GET请求,但POST请求还是搞不定。在2.6版本中,我用的代码可以正常工作,但在3.x版本中,普通的服务器无法处理POST请求。根据我查阅的Python手册,看来我必须使用CGI服务器类,并且还要把脚本映射到那个目录。我不太想这样做,但找不到其他方法。我是不是漏掉了什么?

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]);

1 个回答

26

经过一番尝试和几个小时的搜索,我发现以下方法有效。

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"))

我对这个方法竟然这么简单感到很惊讶。

撰写回答