simplehttpserver.md · Markdown – Документация Python
Документация Python неофициальный перевод

simplehttpserver.md

86 строк · 8.5 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/library/simplehttpserver.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.19. [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) – Простой обработчик HTTP-запросов89> **Примечание**10>11> Модуль [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) был объединён с `http.server` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходного кода в Python 3.1213> **Предупреждение**14>15> [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) не рекомендуется для эксплуатации. Он реализует только базовые проверки безопасности.1617Модуль [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) определяет единственный класс, [`SimpleHTTPRequestHandler`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler), который совместим по интерфейсу с [`BaseHTTPServer.BaseHTTPRequestHandler`](https://python-all.ru/2.7/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler).1819Модуль [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) определяет следующий класс:2021#### `class SimpleHTTPServer.SimpleHTTPRequestHandler(request, client_address, server)`2223Этот класс обслуживает файлы из текущего каталога и подкаталогов, напрямую отображая структуру каталогов на HTTP-запросы.2425Большая часть работы, например разбор запроса, выполняется базовым классом [`BaseHTTPServer.BaseHTTPRequestHandler`](https://python-all.ru/2.7/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler). Этот класс реализует функции [`do_GET()`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET) и [`do_HEAD()`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler.do_HEAD).2627Следующие атрибуты определены на уровне класса [`SimpleHTTPRequestHandler`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler):2829#### `server_version`3031Это будет `"SimpleHTTP/" + __version__`, где `__version__` определён на уровне модуля.3233#### `extensions_map`3435Словарь, сопоставляющий суффиксы с MIME-типами. По умолчанию обозначается пустой строкой и считается `application/octet-stream`. Сопоставление используется без учёта регистра, поэтому должно содержать только ключи в нижнем регистре.3637Класс [`SimpleHTTPRequestHandler`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler) определяет следующие методы:3839#### `do_HEAD()`4041Этот метод обслуживает тип запроса `'HEAD'`: он отправляет заголовки, которые отправил бы для эквивалентного запроса `GET`. Смотрите метод [`do_GET()`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET) для более полного объяснения возможных заголовков.4243#### `do_GET()`4445Запрос сопоставляется с локальным файлом путём интерпретации запроса как пути относительно текущего рабочего каталога.4647Если запрос был сопоставлен с каталогом, то в этом каталоге ищется файл с именем `index.html` или `index.htm` (именно в таком порядке). Если файл найден, возвращается его содержимое; в противном случае формируется список содержимого каталога вызовом метода `list_directory()`. Этот метод использует [`os.listdir()`](https://python-all.ru/2.7/library/os.html#os.listdir) для обхода каталога и возвращает ответ с ошибкой `404`, если `listdir()` завершается неудачей.4849Если запрос был сопоставлен файлу, он открывается и содержимое возвращается. Любое исключение [`IOError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IOError) при открытии запрошенного файла отображается в ошибку `404`, `'File not found'`. В противном случае тип содержимого определяется вызовом метода `guess_type()`, который, в свою очередь, использует переменную *extensions\_map*.5051Выводится заголовок `'Content-type:'` с определённым типом содержимого, за которым следуют заголовок `'Content-Length:'` с размером файла и заголовок `'Last-Modified:'` со временем изменения файла.5253Затем следует пустая строка, обозначающая конец заголовков, и после этого выводится содержимое файла. Если MIME-тип файла начинается с `text/`, файл открывается в текстовом режиме; в противном случае используется двоичный режим.5455Функция [`test()`](https://python-all.ru/2.7/library/test.html#module-test) в модуле [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) является примером, который создаёт сервер, используя [`SimpleHTTPRequestHandler`](https://python-all.ru/2.7/library/simplehttpserver.html#SimpleHTTPServer.SimpleHTTPRequestHandler) в качестве обработчика.5657Новое в версии 2.5: Заголовок `'Last-Modified'`.5859Модуль [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) можно использовать следующим образом, чтобы настроить очень простой веб-сервер, раздающий файлы из текущего каталога.6061```python62import SimpleHTTPServer63import SocketServer6465PORT = 80006667Handler = SimpleHTTPServer.SimpleHTTPRequestHandler6869httpd = SocketServer.TCPServer(("", PORT), Handler)7071print "serving at port", PORT72httpd.serve_forever()73```7475Модуль [`SimpleHTTPServer`](https://python-all.ru/2.7/library/simplehttpserver.html#module-SimpleHTTPServer) можно также запустить напрямую, используя ключ [`-m`](https://python-all.ru/2.7/using/cmdline.html#cmdoption-m) интерпретатора с аргументом `port number`. Подобно предыдущему примеру, он раздаёт файлы из текущего каталога.7677```python78python -m SimpleHTTPServer 800079```8081> **См. также**82>83> **Модуль [`BaseHTTPServer`](https://python-all.ru/2.7/library/basehttpserver.html#module-BaseHTTPServer)**84>85> Реализация базового класса для веб-сервера и обработчика запросов.86