SimpleHTTPServer, Обнаружение завершения передачи файла?

Я делаю простую утилиту для обмена файлами, используя SimpleHTTPServer. Я хотел бы иметь возможность поймать, когда завершится http-передача, т.е. когда загрузка файла клиента будет завершена. Я хотел бы выполнить некоторые действия в этот момент. Это возможно?


person Arboreal Shark    schedule 10.09.2015    source источник


Ответы (1)


Вы можете переопределить обработчик запросов в модуле SimpleHTTPServer. Я прикрепил фрагмент ниже

from __future__ import print_function
import os
import SimpleHTTPServer
import SocketServer


class MySimpleHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):

    def do_GET(self):
        """Serve a GET request."""
        f = self.send_head()
        if f:
            try:
                self.copyfile(f, self.wfile)
            finally:
                if(os.path.isfile(self.translate_path(self.path))):
                    print("Log this download:", self.translate_path(self.path))
                f.close()

PORT = 8000

Handler = MySimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print("serving at port", PORT)
httpd.serve_forever()
person Ozan    schedule 10.09.2015
comment
Просто для ясности: это вызовет часть finally, даже если клиент отключится из-за незавершенной загрузки, верно? - person Emil Vikström; 10.09.2015
comment
Да, ты прав. Кажется, трудно легко определить, был ли запрос полностью получен пользователем без перерыва. - person Ozan; 10.09.2015