httplib.HTTPConnection的多次发送与HTTPResponse的多次读取?
是否可以将一个普通的单一 HTTP POST 请求(不是分块编码的)分成多个部分发送?我在想用 httplib.HTTPConnection
,然后多次调用 send
方法(在每次 send
后调用 read
来读取响应对象)。
(背景:我正在参与设计一个服务器,这个服务器提供类似于事务的服务[一系列相关的请求和响应]。我希望找到最简单、最兼容的 HTTP 表示方式。)
1 个回答
1
在朋友们的劝说下,我相信这件事是可以做到的,于是我找到了一个方法。我重写了 httplib.HTTPResponse
(顺便说一下,httplib.HTTPConnection
很贴心,允许你指定要使用的 response_class
)。
查看了 socket.py 和 httplib.py(特别是 _fileobject.read()
),我发现 read()
只允许做两件事:
- 读取确切数量的字节(这会立即返回,即使连接没有关闭)
- 读取所有字节直到连接关闭
我能够扩展这个功能,只用几行代码就实现了自由流式读取。我还需要把我的 HTTPResponse 的 will_close
成员设置为 0。
我还是很想知道,这种用法是否被认为是可以接受的,或者算是滥用 HTTP。