如何在Python 3中解码HTTP请求标头和正文?

时间:2010-08-18 12:41:19

标签: python http http-headers python-3.x

我正在编写一个实验性的异步Web服务器。我想知道在python中解码HTTP请求的标准/“最佳”方法?

基本上从套接字读取的内容是输入请求原始数据的字节表示;如何将这些转换为标准数据类型,如字典,值列表等?是否有一个很好的通用教程如何做到这一点以及要注意什么(特别是关于编码和浏览器细节)?

3 个答案:

答案 0 :(得分:1)

这对我有用:

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) - 它会为你解码其余的

答案 1 :(得分:0)

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等效项)。

答案 2 :(得分:0)

不要处理插座;抽象!试试httplib2。它是Python 2和3的完整HTTP库,它非常直观,但您必须下载并安装它。请阅读usage example以获取快速介绍。

Dive Into Python 3包含非常好的chapter on installing and using httplib2,以及为什么它比其他替代品更好,包括标准库;我建议你阅读。