2015-09-10 3 views
2

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

ответ

3

Вы можете переопределить обработчик запроса в модуле 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() 
+1

Просто для того, чтобы быть ясным: это вызовет часть 'finally', даже если клиент отключится с неполной загрузкой, не так ли? –

+0

Да, вы правы. Кажется, трудно легко идентифицировать, если запрос полностью получен пользователем без перерывов. – ozy

Смежные вопросы