2011-06-14 53 views
1

文檔聲明在響應完全收到時會調用'handleResponseEnd'。twisted.web.http.HTTPClient在接收到所有響應內容時實現回調嗎?

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

然而,調試似乎表明並非總是如此。當向同一個URI發出多個請求時,它似乎只被第一個請求調用。當向不同的URI發出多個請求時,它仍然只是被稱爲FIRST請求。

這是行爲嗎?多次向同一個URI發送請求幾乎是合理的,因爲收到的響應通常是「304 Not Modified」,所以客戶端不會多次接收內容。不過,我仍然希望回調能夠說明「我們已經收到回覆」。

是否有不同的回調,將更適合訪問完整的迴應?

回答

0

通常情況下,您會通過在工廠上致電buildProtocol()爲每個請求實例化一個新的HTTPClient。這是HTTPPageGetterAgent做的。

有一個例外是使用HTTP持久連接。

你在做什麼,你需要使用相同的協議實例來處理多個請求?

+0

你在調用buildProtocol方面是正確的,這就是我所做的。由於我使用繼承的方式,我在一天之後意識到我的問題比我原先認爲的更復雜。感謝您試圖幫助! – dicato 2011-06-16 22:58:54

+0

忘記從子方法中調用重寫的父方法聽起來很複雜。沒關係 - 很高興你知道了。 – 2011-06-16 23:30:10

+0

我知道,對吧?但是,我原來的部分問題仍然存在。仔細閱讀文檔和實驗表明handleResponseEnd可以被稱爲多次。所以我仍然不能把它作爲一個可靠的事件來確保我完成了接收內容。如果你有想法,我全都耳熟能詳。 – dicato 2011-06-16 23:38:47

0

我其實昨晚就知道了。我有一個從HTTPClient繼承的子類。當重寫connectionMade時,我忘記調用父母的connectionMade。由於connectionMade作爲協議的默認構造函數,因此實例未正確配置。

雖然我不知道這個解決方案的每一個細節,但它在測試中證明是可靠的。發生的異常消失了。

相關問題