我正在写一个实验性的异步Web服务器。我想知道在python中解码HTTP请求的标准/“最佳”方法吗?如何在Python 3中解码HTTP请求标头和正文?
基本上,从套接字读取给我的是传入请求原始数据的字节表示;我怎么能把这些变成标准的数据类型,如字典,值列表等?有没有一个很好的通用教程如何做到这一点,以及要注意什么(特别是关于编码和浏览器细节)?
我正在写一个实验性的异步Web服务器。我想知道在python中解码HTTP请求的标准/“最佳”方法吗?如何在Python 3中解码HTTP请求标头和正文?
基本上,从套接字读取给我的是传入请求原始数据的字节表示;我怎么能把这些变成标准的数据类型,如字典,值列表等?有没有一个很好的通用教程如何做到这一点,以及要注意什么(特别是关于编码和浏览器细节)?
请参阅
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当量)。
不要处理套接字;抽象!尝试httplib2。它是一个完整的用于Python 2和3的HTTP库,虽然必须下载并安装它,但它非常直观。阅读其usage example快速介绍。
Dive Into Python 3包括非常好的chapter on installing and using httplib2,以及为什么它比其他替代品,包括标准库更好;我建议你阅读。
这为我工作:
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) - 它将其余为你虽然
解码