20.19. SimpleHTTPServer – Простой обработчик HTTP-запросов¶SimpleHTTPServer – Simple HTTP request handler
Примечание
Модуль SimpleHTTPServer был объединён с http.server в
Python 3. Инструмент 2to3 автоматически адаптирует импорты при
преобразовании исходного кода в Python 3.
Предупреждение
SimpleHTTPServer не рекомендуется для эксплуатации. Он реализует только
базовые проверки безопасности.
Модуль SimpleHTTPServer определяет единственный класс,
SimpleHTTPRequestHandler, который совместим по интерфейсу с
BaseHTTPServer.BaseHTTPRequestHandler.
Модуль SimpleHTTPServer определяет следующий класс:
-
class
SimpleHTTPServer.SimpleHTTPRequestHandler(request, client_address, server)¶ Этот класс обслуживает файлы из текущего каталога и подкаталогов, напрямую отображая структуру каталогов на HTTP-запросы.
Большая часть работы, например разбор запроса, выполняется базовым классом
BaseHTTPServer.BaseHTTPRequestHandler. Этот класс реализует функцииdo_GET()иdo_HEAD().Следующие атрибуты определены на уровне класса
SimpleHTTPRequestHandler:-
server_version¶
Это будет
"SimpleHTTP/" + __version__, где__version__определён на уровне модуля.-
extensions_map¶ Словарь, сопоставляющий суффиксы с MIME-типами. По умолчанию обозначается пустой строкой и считается
application/octet-stream. Сопоставление используется без учёта регистра, поэтому должно содержать только ключи в нижнем регистре.
Класс
SimpleHTTPRequestHandlerопределяет следующие методы:-
do_HEAD()¶ Этот метод обслуживает тип запроса
'HEAD': он отправляет заголовки, которые отправил бы для эквивалентного запросаGET. Смотрите методdo_GET()для более полного объяснения возможных заголовков.
-
do_GET()¶ Запрос сопоставляется с локальным файлом путём интерпретации запроса как пути относительно текущего рабочего каталога.
Если запрос был сопоставлен с каталогом, то в этом каталоге ищется файл с именем
index.htmlилиindex.htm(именно в таком порядке). Если файл найден, возвращается его содержимое; в противном случае формируется список содержимого каталога вызовом методаlist_directory(). Этот метод используетos.listdir()для обхода каталога и возвращает ответ с ошибкой404, еслиlistdir()завершается неудачей.Если запрос был сопоставлен файлу, он открывается и содержимое возвращается. Любое исключение
IOErrorпри открытии запрошенного файла отображается в ошибку404,'File not found'. В противном случае тип содержимого определяется вызовом методаguess_type(), который, в свою очередь, использует переменную extensions_map.Выводится заголовок
'Content-type:'с определённым типом содержимого, за которым следуют заголовок'Content-Length:'с размером файла и заголовок'Last-Modified:'со временем изменения файла.Затем следует пустая строка, обозначающая конец заголовков, и после этого выводится содержимое файла. Если MIME-тип файла начинается с
text/, файл открывается в текстовом режиме; в противном случае используется двоичный режим.Функция
test()в модулеSimpleHTTPServerявляется примером, который создаёт сервер, используяSimpleHTTPRequestHandlerв качестве обработчика.Новое в версии 2.5: Заголовок
'Last-Modified'.
-
Модуль SimpleHTTPServer можно использовать следующим образом, чтобы
настроить очень простой веб-сервер, раздающий файлы из текущего
каталога.
import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
Модуль SimpleHTTPServer можно также запустить напрямую, используя
ключ -m интерпретатора с аргументом port number.
Подобно предыдущему примеру, он раздаёт файлы из
текущего каталога.
python -m SimpleHTTPServer 8000
См. также
- Модуль
BaseHTTPServer Реализация базового класса для веб-сервера и обработчика запросов.