Gi en Twisted-proxyforespørsel en frist for kroppen
Kombiner tidsavbruddet for tilkobling på proxy-endepunktet med en Deferred-frist som også dekker lesing av en liten svarkropp.
En ProxyAgent kan koble til raskt og deretter vente ubegrenset på en svarkropp. Tidsavbruddet for tilkobling på proxy-endepunktet beskriver ikke den senere ventingen.
Sett en tilkoblingsgrense på endepunktet når du bygger agenten. For den offentlige HTTP-forespørselen nedenfor kan en uautentisert kandidat fra HTTP-proxylisten erstatte adressen hvis offentlige mellommenn er tillatt:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
For et lite svar du vil samle i minnet, ta med lesing av kroppen i Deferred-kjeden før du legger til fristen:
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()))
Utdraget forutsetter at applikasjonen allerede har sin reactor og en konfigurert agent. Forespørsels-Deferreden til ProxyAgent gir et svarobjekt; readBody returnerer Deferreden for kroppen. Returnerer du den fra callbacken, venter kjeden også på den operasjonen.
Plasseringen betyr noe. Twisted bruker addTimeout på arbeidet som callbackene installert før den representerer. Å legge til en kroppsleser etterpå ville beskrive en annen grense. I denne ordningen starter timeren når addTimeout kalles, og dekker den ventende forespørselen og kroppsarbeidet i den kjeden.
Bruk en strømmekonsument for store eller ubegrensede kropper og representer fullføringen på samme måte. En frist på klientsiden begrenser hvor lenge applikasjonen din venter; den omkonfigurerer ikke proxyens egen oppstrøms tilkoblingstidsavbrudd.