Как получить файлы через класс Python BaseHTTPRequestHandler?

Начинающий вопрос ре. BaseHTTPRequestHandler и получение данных...

Я использовал BaseHTTPRequestHandler для получения строк JSON, переданных в качестве данных на мой URI. Теперь мне нужно получить как строки JSON, так и файлы ascii. Как я могу сказать, что я получил как данные JSON, так и отдельный плоский файл? Как мне получить доступ к данным в файле?

Что если я получил несколько файлов?

Кстати, я только что выполнил тест, позвонив по моему URI из Почтальона и увидел следующие заголовки:

headers: Host: localhost:6081

Content-Type: application/x-www-form-urlencoded

User-Agent: python-requests/2.2.1 CPython/3.4.0 Linux/3.13.0-35-generic

Accept: */*

Accept-Encoding: gzip, deflate, compress

Content-Length: 403

Спасибо!

Бен

1 ответ

Решение

Ответ в библиотеке CGI. Обратитесь к следующему сообщению Stackru: Простой Python WebServer. Второй ответ в этом посте был наиболее полезным для нас.

Вот некоторый тестовый код, который может оказаться полезным для распечатки того, что происходит за кулисами, особенно если вы пытаетесь получить несколько файлов в одном посте:

        print("command: " + self.command + "\npath: " + self.path + "\nrequest_version: " \
            + self.request_version + "\nheaders: " + str(self.headers))
        form = cgi.FieldStorage(
            fp=self.rfile,
            headers=self.headers,
            environ={'REQUEST_METHOD': 'POST',
                     'CONTENT_TYPE': self.headers['Content-Type'],
                     })
        print("\nform:", str(form))
        print("\nform['file'].filename:", form['file'].filename)
        filename = form['file'].filename
        data = form['file'].file.read()
        open("/tmp/%s" % filename, "wb").write(data)
        print('\ndata:', data)
Другие вопросы по тегам