Атрибут content_length
Атрибут content_length применяется к объекту запроса
request и содержит длину тела HTTP-запроса
в байтах. Значение берётся из заголовка
Content-Length. Если заголовок отсутствует,
атрибут возвращает None. Атрибут доступен только
для чтения и не принимает параметров.
Атрибут полезен, когда нужно проверить размер отправленных данных до их чтения: например, чтобы отклонить слишком большой запрос или зарезервировать буфер нужного размера.
Синтаксис
request.content_length
Пример
Давайте выведем длину тела POST-запроса:
from bottle import Bottle, request
app = Bottle()
@app.route('/submit', method='POST')
def submit():
return f"length: {request.content_length}"
Результат выполнения кода для тела размером 5 байт:
"length: 5"
Пример
Давайте проверим, передан ли заголовок
Content-Length, и отклоним слишком большие запросы:
from bottle import Bottle, request, abort
app = Bottle()
@app.route('/upload', method='POST')
def upload():
if request.content_length is None:
abort(411, 'Length Required')
if request.content_length > 1024:
abort(413, 'Payload Too Large')
return f"accepted: {request.content_length}"
Результат выполнения кода для запроса с телом в 2048 байт:
413 Payload Too Large
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
атрибут
body,
который возвращает тело запроса -
атрибут
content_type,
который возвращает тип тела запроса -
атрибут
chunked,
который показывает, передан ли запрос по частям