ProxyAgent se může připojit rychle a potom neomezeně čekat na tělo odpovědi. Časový limit připojení jeho koncového bodu proxy tento pozdější čekání nepopisuje.

Při sestavování agenta nastavte na koncovém bodu mez připojení. U veřejného požadavku HTTP níže může neověřený kandidát z seznamu HTTP proxy nahradit adresu, pokud jsou veřejní prostředníci povoleni:

endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
                              timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

U malé odpovědi, kterou chcete shromáždit v paměti, zařaďte čtení těla do řetězce Deferred ještě před přidáním lhůty:

from twisted.web.client import readBody

d = agent.request(b'GET', b'http://example.com/')
d.addCallback(readBody)
d.addTimeout(10, reactor)
d.addCallback(lambda body: print(len(body)))
d.addErrback(lambda failure: print(failure.getErrorMessage()))

Úryvek předpokládá, že aplikace už má svůj reactor a nakonfigurovaného agenta. Deferred požadavku ProxyAgent vrací objekt odpovědi; readBody vrací Deferred pro tělo. Vrácení z callbacku způsobí, že řetězec čeká i na tuto operaci.

Umístění je důležité. Twisted aplikuje addTimeout na práci, kterou představují callbacky nainstalované před ním. Přidání čtečky těla až potom by popisovalo jinou hranici. Při tomto uspořádání se časovač spouští při volání addTimeout a pokrývá čekající požadavek i práci s tělem v daném řetězci.

Pro velká nebo neomezená těla použijte streamovacího konzumenta a jeho dokončení vyjádřete stejným způsobem. Lhůta na straně klienta omezuje, jak dlouho vaše aplikace čeká; nepřekonfiguruje vlastní časový limit připojení proxy směrem výše.

Související články