问题描述
|
文档指出,\'handleResponseEnd \'在完全收到响应后即被调用。
http://twistedmatrix.com/documents/11.0.0/api/twisted.web.http.HTTPClient.html#handleResponseEnd
但是,调试似乎表明并非总是如此。当对同一URI发出多个请求时,它似乎仅被FirsT请求调用。当对不同的URI发出多个请求时,它仍然似乎仅被FirsT请求调用。
是否需要这种行为?多次向同一URI发出请求几乎是有道理的,因为接收到的响应通常为“ 304未修改”,因此客户端不会多次接收到该内容。但是,我仍然希望运行一个回调,声明“我们已经收到响应”。
是否有其他回调更适合访问完整的响应?
解决方法
通常,您可以通过在工厂中致电
buildProtocol()
来为每个请求实例化一个新的HTTPClient
。 HTTPPageGetter
和Agent
就是这样做的。
一种例外是使用HTTP持久连接时。
您正在做什么,因此您需要对多个请求使用相同的协议实例?
, 我实际上是昨晚发现的。我有一个从HTTPClient继承的子类。覆盖connectionMade时,我忘记了调用父级的connectionMade。由于connectionMade充当协议的默认构造函数,因此未正确配置实例。
虽然我不知道该解决方案的每个细节,但事实证明它在测试中是可靠的。发生的异常消失了。