如何在Python 3中解码HTTP请求头和主体?

1 投票
3 回答
5590 浏览
提问于 2025-04-16 02:58

我正在写一个实验性的异步网络服务器。我想知道在Python中解码HTTP请求的标准或“最佳”方法是什么?

简单来说,从套接字读取到的内容是一个字节表示的原始请求数据;我该如何将这些字节转换成标准的数据类型,比如字典、值的列表等等?有没有好的教程可以参考,特别是关于编码和浏览器特性方面需要注意的事项?

3 个回答

0

别去碰那些复杂的套接字,直接用更简单的方式!试试httplib2吧。这是一个适用于Python 2和3的完整HTTP库,使用起来非常直观,虽然你需要先下载和安装它。你可以看看它的使用示例,这样可以快速了解怎么用。

Dive Into Python 3这本书里有一章讲得很好,专门介绍了如何安装和使用httplib2,以及它为什么比其他选择更好,包括标准库。我推荐你去看看。

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 的类似库)。

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),但它会帮你解码其他的内容。

撰写回答