как декодировать заголовки и тело HTTP-запроса в Python 3? - PullRequest
1 голос
/ 18 августа 2010

Я пишу экспериментальный асинхронный веб-сервер.меня интересует стандартный / «лучший» способ декодирования HTTP-запросов в python?

в основном то, что дает чтение из сокета, представляет собой байтовое представление необработанных данных входящего запроса;как я могу превратить их в стандартные типы данных, такие как словари, списки значений и т. д.?Есть ли хороший общий учебник, как это сделать и на что стоит обратить внимание (особенно в отношении кодировок и особенностей браузера)?

Ответы [ 3 ]

1 голос
/ 07 июня 2013

Это сработало для меня:

import StringIO, httplib

ucode_data = unicode( your_raw_data ,"utf-8")
str = StringIO.StringIO( ucode_data )
http_header = httplib.HTTPMessage(str,0)
http_header.readheaders()

print http_header.__dict__

но он не декодирует запрос (например, GET /index.html HTTP / 1.2) - он все же расшифрует все остальное для вас

0 голосов
/ 21 августа 2010

Не работайте с розетками; Аннотация! Попробуйте httplib2 . Это полная библиотека HTTP для Python 2 и 3, и она очень интуитивно понятна, хотя вам нужно скачать и установить ее. Прочитайте пример использования для быстрого ознакомления.

Dive Into Python 3 включает в себя очень хорошую главу об установке и использовании httplib2 и о том, почему она лучше других альтернатив, включая стандартную библиотеку; Я рекомендую вам прочитать это.

0 голосов
/ 18 августа 2010

См.

20.10.4. Объекты HTTPMessage

Экземпляр http.client.HTTPMessage содержит заголовки из ответа HTTP. Это реализовано с использованием класса email.message.Message.

http://docs.python.org/py3k/library/http.client.html#httpmessage-objects

Вы должны иметь возможность использовать HTTPMessage в качестве отдельного класса без вызова urllib (или любого другого эквивалента Python 3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...