twisted.web.http.HTTPClient收到全部响应内容时是否实现了回调?
文档上说,当响应完全接收完毕时,会调用'handleResponseEnd'这个函数。
http://twistedmatrix.com/documents/11.0.0/api/twisted.web.http.HTTPClient.html#handleResponseEnd
不过,调试的时候发现,这个说法并不总是正确。当对同一个网址发起多个请求时,这个函数似乎只在第一次请求时被调用。而对不同的网址发起多个请求时,它同样只在第一次请求时被调用。
这种行为是正常的吗?对同一个网址发起多次请求是有道理的,因为通常返回的响应是“304 未修改”,这样客户端就不会重复收到内容。不过,我还是希望能有一个回调函数来告诉我“我们已经完成接收响应了”。
有没有其他更合适的回调函数,可以用来获取完整的响应呢?
2 个回答
0
我昨晚其实搞明白了。我的一个子类是从HTTPClient继承来的。在重写connectionMade这个方法时,我忘了调用父类的connectionMade。因为connectionMade就像是协议的默认构造函数,所以实例没有被正确配置。
虽然我不知道这个解决方案的每一个细节,但在测试中它已经证明是可靠的。之前出现的问题都消失了。
0
通常情况下,你会为每个请求创建一个新的 HTTPClient
,方法是通过你的工厂调用 buildProtocol()
。这就是 HTTPPageGetter
和 Agent
所做的事情。
不过,有一种情况是例外,那就是使用 HTTP 持久连接的时候。
你在做什么,为什么需要在多个请求中使用同一个协议实例呢?