Как я прочитал необработанный HTTP-адрес STRING. Я нашел несколько решений для чтения анализируемой версии сообщения, однако проект, над которым я работаю, отправляет необработанную полезную нагрузку xml без заголовка. Поэтому я пытаюсь найти способ читать данные сообщения, не анализируя его в массив значений = = значение.Python: BaseHTTPRequestHandler - Чтение исходного сообщения
ответ
Думаю, self.rfile.read(self.headers.getheader('content-length'))
должен возвращать необработанные данные в виде строки. Согласно документации непосредственно внутри класса BaseHTTPRequestHandler:
- rfile is a file object open for reading positioned at the
start of the optional input data part;
self.rfile.read(int(self.headers.getheader('Content-Length')))
будет возвращать исходные данные HTTP POST в виде строки.
разбив его:
- Заголовок 'Content-Length' определяет, сколько байт данных HTTP POST содержит.
self.headers.getheader('Content-Length')
возвращает длину содержимого (значение заголовка) в виде строки.- Это должно быть преобразовано в целое число перед передачей как параметр в
self.rfile.read()
, поэтому используйте функциюint()
.
Кроме того, обратите внимание, что имя заголовка чувствительно к регистру, так что имеет быть определен как «Content-Length» только.
Edit: Видимо заголовок поля не чувствительны к регистру (по крайней мере, в Python 2.7.5), который я считаю, это правильное поведение, так как https://tools.ietf.org/html/rfc2616 состояний:
Каждое поле заголовка состоит имени с последующим двоеточие («:») и значение поля. Имена полей нечувствительны к регистру.
Пожалуйста, будьте более подробными, я понятия не имею, что вы предлагаете. –
@jb: Я добавил дополнительные сведения к ответу. Дайте мне знать, если есть что-то конкретное, которое еще нужно разработать. –
@SindhuriKuppasad, имя заголовка не зависит от регистра. Следующие утверждения возвращают длину содержимого в моих тестах: 'self.headers.getheader ('content-length')' и 'self.headers.getheader ('content-LENGTH')' – famzah
- 1. ошибка python BaseHTTPRequestHandler ошибка
- 2. Python: обслуживание BaseHTTPRequestHandler через WSGI
- 3. Python: получить ответ POST от BaseHTTPRequestHandler
- 4. Как получить файлы через класс BaseHTTPRequestHandler Python?
- 5. Комбинация SimpleXMLRPCServer и BaseHTTPRequestHandler в Python
- 6. Python BaseHTTPRequestHandler: Отвечать с помощью JSON
- 7. Как разместить очередь в Python 2 BaseHTTPRequestHandler?
- 8. python - using BaseHTTPRequestHandler с UnixStreamServer вызывает исключение
- 9. Чтение исходного кода Android
- 10. Чтение исходного кода
- 11. чтение исходного кода ядра Linux
- 12. Чтение исходного файла изображения с
- 13. Как начать чтение исходного кода?
- 14. Чтение исходного раздела с помощью ConfigParser
- 15. Python чтение или хранение строки исходного текста HTML построчно
- 16. Чтение исходного кода Python в Pycharm, в частности __builtin__.py
- 17. Чтение исходного кода на Python для улучшения навыков программирования
- 18. Запрос на отправку Python POST - установка всего исходного тела сообщения?
- 19. Чтение сообщения в последовательности
- 20. Чтение сообщения от gear2
- 21. Чтение значений сообщения JSON
- 22. Как передать изображения клиенту с помощью Python BaseHttpRequestHandler в Windows?
- 23. Как связать несколько указанных IP-адресов на BaseHTTPRequestHandler из python
- 24. Чтение содержимого сообщения и отправителя сообщения?
- 25. Python - Загрузка исходного скрипта
- 26. анализатор исходного кода python
- 27. Python - упаковка исходного дистрибутива
- 28. Организация исходного файла Python
- 29. BaseHTTPRequestHandler doPOST метод не обновляет html?
- 30. Используйте шаблон html-страницы с BaseHttpRequestHandler
После того, как вы попытаетесь выполнить некоторые быстрые поисковые запросы, эти операции блокируют выполнение как для меня, так и для других. – kwolfe
Необходимо указать длину контента: data = self.rfile.read (int (self.headers.getheader ('content-length'))) – kwolfe
Да, извините. Это блокирование, потому что объект rfile является сокетом, и вызов 'read()' в основном говорит «читать, пока не осталось ничего, чтобы читать», но есть еще что читать, пока сокет открыт, поэтому он зависает и ждет входящего контента , Серверы избегают повесить ВСЕГДА, указывая, КАК МНОГО содержимое читать. Извините, я должен был положить это в первую очередь. – smakateer