Python Glossary English

Python 3.0+http.serverпонятие

http.server.SimpleHTTPRequestHandler

обработчики запросов

Готовый обработчик, раздающий файлы и списки каталогов по GET и HEAD; основа команды python -m http.server.

Синтаксис

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

По умолчанию раздаётся текущий рабочий каталог, а не каталог скрипта; другой каталог задают через functools.partial(SimpleHTTPRequestHandler, directory=...). Раздаётся всё, включая .git и .env, авторизации нет — это инструмент разработки, а не продакшен. Пути с .. нормализуются и выше корня не выходят. POST не поддерживается — ответ 501.

Примеры

import io, os, functools
from http.server import SimpleHTTPRequestHandler
class Files(SimpleHTTPRequestHandler):
    def setup(self):  # вместо сокета — байты в памяти
        self.rfile = io.BytesIO(self.request)
        self.wfile = io.BytesIO()
    def log_message(self, format, *args):
        pass
    def finish(self):
        head, _, body = self.wfile.getvalue().partition(b'\r\n\r\n')
        print(head.split(b'\r\n')[0].decode(), body[:5])
os.makedirs('public', exist_ok=True)
with open('public/hello.txt', 'w') as f:
    f.write('hello')
with open('secret.txt', 'w') as f:  # лежит выше корня раздачи
    f.write('token')
handler = functools.partial(Files, directory='public')
handler(b'GET /hello.txt HTTP/1.1\r\n\r\n', ('127.0.0.1', 5000), None)
# → HTTP/1.0 200 OK b'hello'
handler(b'GET /../secret.txt HTTP/1.1\r\n\r\n', ('127.0.0.1', 5000), None)
# → HTTP/1.0 404 File not found

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности