httplib.HTTPConnection的多次发送与HTTPResponse的多次读取?

2 投票
1 回答
769 浏览
提问于 2025-04-16 12:24

是否可以将一个普通的单一 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。

撰写回答