Python Glossary English

все Python 3http.clientисключение

http.client.LineTooLong

исключения

Строка статуса, заголовка или размера куска в ответе длиннее 65536 байт. Защита от сервера, который шлёт бесконечные строки. Потомок HTTPException.

Синтаксис

except http.client.LineTooLong as e: ...

Лимит длины строки жёстко зашит в модуль и не настраивается. Другая защита — не больше 100 заголовков — устроена иначе: её превышение даёт голый HTTPException «got more than 100 headers», а не LineTooLong, поэтому ловить стоит базовый класс (в 3.15 предел задаётся параметром max_response_headers). Текст исключения говорит, какая строка оказалась длинной.

Примеры

import http.client
import io
class FakeSock:  # сокет, читающий из готовых байтов
    def __init__(self, data):
        self.data = data
    def makefile(self, mode):
        return io.BytesIO(self.data)
long_header = b'HTTP/1.1 200 OK\r\nX: ' + b'a' * 70000 + b'\r\n\r\n'
try:
    http.client.HTTPResponse(FakeSock(long_header)).begin()
except http.client.LineTooLong as e:
    print(e)  # → got more than 65536 bytes when reading header line
many = b'HTTP/1.1 200 OK\r\n' + b'X: 1\r\n' * 101 + b'\r\n'
try:
    http.client.HTTPResponse(FakeSock(many)).begin()
except http.client.HTTPException as e:
    print(type(e).__name__, e)  # → HTTPException got more than 100 headers

См. также

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