все 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Сообщить о неточности