Документация Python неофициальный перевод

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

Реализация базового класса для веб-сервера и обработчика запросов.