ProxyAgent sa môže rýchlo pripojiť a potom neobmedzene čakať na telo odpovede. Časový limit pripojenia jeho koncového bodu proxy tento neskorší čakací čas neopisuje.

Pri zostavovaní agenta nastavte na koncovom bode hranicu pripojenia. Pre verejnú požiadavku HTTP nižšie môže neoverený kandidát zo zoznamu HTTP proxy nahradiť adresu, ak sú verejní sprostredkovatelia povolení:

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

Pri malej odpovedi, ktorú chcete zhromaždiť v pamäti, zaradte čítanie tela do reťazca Deferred ešte pred pridaním termínu:

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()))

Úryvok predpokladá, že aplikácia už má svoj reactor a nakonfigurovaného agenta. Deferred požiadavky ProxyAgent vracia objekt odpovede; readBody vracia Deferred pre telo. Vrátenie z callbacku spôsobí, že reťazec čaká aj na túto operáciu.

Umiestnenie je dôležité. Twisted aplikuje addTimeout na prácu, ktorú predstavujú callbacky nainštalované pred ním. Pridanie čítača tela až potom by opisovalo inú hranicu. V tomto usporiadaní sa časovač spúšťa pri volaní addTimeout a pokrýva čakajúcu požiadavku aj prácu s telom v danom reťazci.

Pre veľké alebo neobmedzené telá použite streamovacieho konzumenta a jeho dokončenie vyjadrite rovnakým spôsobom. Termín na strane klienta obmedzuje, ako dlho vaša aplikácia čaká; neprekonfiguruje vlastný časový limit pripojenia proxy smerom nahor.

Súvisiace články