Сообщить об ошибке.

Класс SimpleHTTPRequestHandler() модуля http.server в Python

Сопоставляет структуру каталогов с HTTP-запросами

Синтаксис:

import http.server

http.server.SimpleHTTPRequestHandler(request, client_address, 
                                     server, directory=None)

Параметры:

  • request - запрос,
  • client_address - кортеж формы (host, port),
  • server - экземпляр сервера,
  • directory=None - обслуживаемый каталог (по умолчанию - текущий).

Возвращаемое значение:

Описание:

Класс SimpleHTTPRequestHandler() модуля http.server обслуживает файлы из текущего каталога directory, напрямую сопоставляя структуру каталогов с HTTP-запросами.

Большая часть работы, например анализ запроса, выполняется базовым классом BaseHTTPRequestHandler.

Этот класс реализует методы .do_GET() и .do_HEAD().

Атрибуты уровня класса SimpleHTTPRequestHandler:

SimpleHTTPRequestHandler.server_version:

Атрибут SimpleHTTPRequestHandler.server_version возвращает 'SimpleHTTP/' + __version__, где __version__ определено на уровне модуля.

SimpleHTTPRequestHandler.extensions_map:

Атрибут SimpleHTTPRequestHandler.extensions_map возвращает словарь, сопоставляющий суффиксы, в типы MIME, содержит пользовательские переопределения для системных сопоставлений по умолчанию.

Отображение используется без учета регистра и поэтому должно содержать только ключи в нижнем регистре.

Изменено в Python 3.9: этот словарь больше не заполняется системными сопоставлениями по умолчанию, а содержит только переопределения.

SimpleHTTPRequestHandler.directory:

Атрибут SimpleHTTPRequestHandler.directory возвращает обслуживаемый каталог. Если не указано иное, то обслуживаемый каталог является текущим рабочим каталогом.

Изменено в Python 3.9: Принимает объект, похожий на путь, например pathlib.Path().

Объект SimpleHTTPRequestHandler.

Класс SimpleHTTPRequestHandler наследует все методы и атрибуты класса BaseHTTPRequestHandler и определяет следующие дополнительные методы:

SimpleHTTPRequestHandler.do_HEAD():

Метод SimpleHTTPRequestHandler.do_HEAD() обслуживает тип запроса 'HEAD': он отправляет заголовки, которые потом отправит для эквивалентного запроса 'GET'.

SimpleHTTPRequestHandler.do_GET():

Метод SimpleHTTPRequestHandler.do_GET() сопоставляет запрос с локальным файлом, интерпретируя запрос как путь относительно текущего рабочего каталога.

Если запрос был сопоставлен с каталогом, то каталог проверяется на наличие файла с именем index.html или index.htm (в таком порядке). В случае обнаружения возвращается содержимое файла. В противном случае создается список каталогов, путем вызова метода .list_directory(). Этот метод использует функцию os.listdir() для сканирования каталога и возвращает ответ об ошибке 404, если os.listdir() не работает.

Если запрос был сопоставлен с файлом, он открывается. Любое исключение OSError при открытии запрошенного файла сопоставляется с ошибкой 404, 'File not found'. Если в запросе был заголовок 'If-Modified-Since' и файл не был изменен после этого времени, то отправляется ответ 304, 'Not Modified'. В противном случае тип содержимого угадывается путем вызова метода .guess_type(), который, в свою очередь, использует переменную .extensions_map, и возвращает содержимое файла.

Выводится заголовок 'Content-type: ...' с предполагаемым типом содержимого, за которым следует заголовок 'Content-Length: ...' с размером файла и заголовок 'Last-Modified: ...' со временем модификации файла.

Затем следует пустая строка, обозначающая конец заголовков, а затем выводится содержимое файла. Если MIME-тип файла начинается с text/... файл открывается в текстовом режиме, в противном случае используется двоичный режим.

Изменено в Python 3.7: Поддержка заголовка 'If-Modified-Since'.


Примеры использования SimpleHTTPRequestHandler.

Класс SimpleHTTPRequestHandler можно использовать следующим образом для создания очень простого веб-сервера, обслуживающего файлы относительно текущего каталога:

import http.server
import socketserver

PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

Модуль http.server также можно вызвать напрямую с помощью параметра интерпретатора -m с аргументом номера порта. Как и в предыдущем примере, это обслуживает файлы относительно текущего каталога:

python -m http.server 8000

По умолчанию сервер привязывается ко всем интерфейсам. Параметр -b/--bind указывает конкретный адрес, к которому он должен привязаться. Поддерживаются адреса IPv4 и IPv6. Например, следующая команда заставляет сервер привязываться только к localhost:

python -m http.server 8000 --bind 127.0.0.1

Новое в Python 3.8: аргумент --bind расширен для поддержки IPv6.

По умолчанию сервер использует текущий каталог. Параметр -d/--directory указывает каталог, в котором должны обслуживаться файлы. Например, следующая команда использует определенный каталог:

python -m http.server --directory /tmp/

Новое в Python 3.7: параметр --directory позволяет указать альтернативный каталог.