Возможно ли, чтобы SimpleHTTPServer обслуживал файлы из двух разных каталогов?
Если я сделаю python -m SimpleHTTPServer
он обслуживает файлы в текущем каталоге.
Моя структура каталогов выглядит так:
/protected/public
/protected/private
/test
Я хочу запустить сервер в моем /test
каталог, и я хочу, чтобы он обслуживал файлы в /test
каталог. Но я хочу, чтобы все запросы к серверу, начинающиеся с '/public', были извлечены из /protected/public
каталог.
например, просьба http://localhost:8000/public/index.html
будет служить файл в /protected/public/index.html
Возможно ли это со встроенным сервером или мне придется написать собственный?
3 ответа
Я не верю, что SimpleHTTPServer имеет эту функцию, однако, если вы используете символическую ссылку внутри /test, которая указывает на /protected/public, это должно эффективно сделать то же самое.
Я думаю, что это абсолютно возможно сделать. Вы можете запустить сервер внутри /test
каталог и переопределение translate_path
метод SimpleHTTPRequestHandler
следующее:
import BaseHTTPServer
import SimpleHTTPServer
server_address = ("", 8888)
PUBLIC_RESOURCE_PREFIX = '/public'
PUBLIC_DIRECTORY = '/path/to/protected/public'
class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def translate_path(self, path):
if self.path.startswith(PUBLIC_RESOURCE_PREFIX):
if self.path == PUBLIC_RESOURCE_PREFIX or self.path == PUBLIC_RESOURCE_PREFIX + '/':
return PUBLIC_DIRECTORY + '/index.html'
else:
return PUBLIC_DIRECTORY + path[len(PUBLIC_RESOURCE_PREFIX):]
else:
return SimpleHTTPServer.SimpleHTTPRequestHandler.translate_path(self, path)
httpd = BaseHTTPServer.HTTPServer(server_address, MyRequestHandler)
httpd.serve_forever()
Надеюсь это поможет.
Я думаю, что нашел ответ на этот вопрос, в основном это связано с изменением текущего рабочего каталога, запуском сервера, а затем возвращением к исходному рабочему каталогу.
Вот как я этого добился, я закомментировал для вас два набора опций, так как для меня было просто перейти в папку в каталоге моего приложения и затем вернуться на один уровень в исходный каталог приложения. Но, возможно, вы захотите перейти в другой каталог вашей файловой системы, а затем вернуться куда-нибудь еще или вообще не возвращаться.
#Setup file server
import SimpleHTTPServer
import SocketServer
import os
PORT = 5002
# -- OPTION 1 --
#os.chdir(os.path.join(os.path.abspath(os.curdir),'PATH_TO_FOLDER_IN_APP_DIR'))
# -- OPTION 2 --
#os.chdir('PATH_TO_ROOT_DIRECTORY')
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
# -- OPTION 1 --
#os.chdir(os.path.abspath('..'))
# -- OPTION 2 --
#os.chdir('PATH_TO_ORIGINAL_WORKING_DIR')
Дайте мне знать, как это работает!