Как избавиться от "HTTP..CLIENT.BAD STATUS LINE"?
Я хочу установить заголовки в urllib.request
избавиться от http.client.BadStatusLine
в пути
headers = ['Content-length']=str(len(bytes(body, 'utf-8')))
req = urllib.request.Request(url, bytes(body, 'utf-8'), headers)
Источник: BadStatusLine Возникла исключительная ситуация при возврате ответа с сервера в Python 3
Что значит body
относится к в hearders
?
1 ответ
Правильный синтаксис headers['Content-length']=str(len(bytes(body, 'utf-8')))
Угадай, есть опечатка. Заголовок длины содержимого обозначает размер ответа html или иным образом сервером. Например, если серверу запрашивается страница html, он возвращает размер содержимого html.
Например, когда вы запрашиваете страницу: http://www.york.ac.uk/teaching/cws/wws/webpage1.html
(Это простая демонстрационная страница, у нее нет лишних ресурсов). Заголовки ответа сервера показаны ниже. Вы можете увидеть это для любой страницы в консоли разработчика в chrome или firefox, на вкладке "сеть" и "все" заголовки.
Accept-Ranges:bytes
Cache-Control:max-age=300
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1957
Content-Type:text/html
Date:Sun, 17 Jul 2016 06:48:41 GMT
Expires:Sun, 17 Jul 2016 06:53:41 GMT
Keep-Alive:timeout=4, max=100
Server:Apache/2.2.22 (Ubuntu)
Vary:Accept-Encoding
Заголовок content-Length показывает длину 1957 байт. Если вы идете на страницу и проверьте источник, нажав Ctrl-U
, Вы заметите, что размер текста намного больше. Но полученный текст сжат. Так что зайдите на http://www.txtwizard.net/compression и поместите исходный текст. Вы заметите, что сжатый размер составляет 1957 байт (кодировка также упоминается как Content-Encoding:Gzip
в заголовках, а сайт настроен для gz
сжатия.
Итак, что касается кода, body
является ответом сервера html или иным образом (например, для файла, или изображения, или чего-либо, как обозначено content-type
заголовок).
Другой пример: https://github.com/python/cpython/blob/master/Lib/http/server.py
это код python3 для SimpleHTTPResponseHandler, который можно использовать для написания пользовательских обработчиков для встроенного сервера python.
Переменная encoded
это строка, содержащая html-ответ, закодированный в виде двоичного файла для передачи в функцию do_GET. Проверьте, что Content-Length
заголовок установлен на размер закодированной строки.