Сопоставляет структуру каталогов с HTTP-запросами.
Синтаксис:
import http.server
http.server.SimpleHTTPRequestHandler(request, client_address,
server, directory=None)
Параметры:
request
- запрос,client_address
- кортеж формы (host, port),server
- экземпляр сервера, directory=None
- обслуживаемый каталог (по умолчанию - текущий).
Возвращаемое значение:
Описание:
Атрибуты уровня класса 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.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
позволяет указать альтернативный каталог.