Пример POST для Python3 http.server - PullRequest
21 голосов
/ 23 января 2010

Я преобразую приложение 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 Ответ

18 голосов
/ 23 января 2010

После тыкания и еще нескольких часов поиска в Google я нашел следующие работы.

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

Я удивлен тем, как легко это было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...