1

文档指出,当完全接收到响应时,会调用“handleResponseEnd”。

http://twistedmatrix.com/documents/11.0.0/api/twisted.web.http.HTTPClient.html#handleResponseEnd

然而,调试似乎表明这并不总是正确的。当向同一个 URI 发出多个请求时,它似乎只为第一个请求调用。当向不同的 URI 发出多个请求时,它似乎仍然只为第一个请求调用。

是否需要这种行为?多次向同一个 URI 发出请求几乎是有意义的,因为收到的响应通常是“304 Not Modified”,因此客户端不会多次收到内容。但是,我仍然希望回调运行说明“我们已完成接收响应”。

是否有更适合访问完整响应的不同回调?

4

2 回答 2

0

通常你会通过调用你的工厂HTTPClient来为每个请求实例化一个新的。buildProtocol()这就是做什么HTTPPageGetterAgent做什么。

一个例外是使用 HTTP 持久连接时。

你在做什么以至于你需要对多个请求使用相同的协议实例?

于 2011-06-16T17:56:47.787 回答
0

我昨晚真的想通了。我有一个继承自 HTTPClient 的子类。覆盖connectionMade时,我忘了调用父级的connectionMade。由于 connectionMade 充当协议的默认构造函数,因此没有正确配置实例。

虽然我不知道这个解决方案的每一个细节,但它在测试中证明是可靠的。发生的异常已经消失。

于 2011-06-16T22:57:31.767 回答