Giv en Twisted-proxyanmodning en frist for sin krop
Kombinér proxyendepunktets forbindelsestimeout med en Deferred-frist, der også dækker læsning af en lille svarstekst.
En ProxyAgent kan forbinde hurtigt og derefter vente ubegrænset på en svarkrop. Dens proxyendepunkts forbindelsestimeout beskriver ikke den senere ventetid.
Sæt en forbindelsesgrænse på endepunktet, når du bygger agenten. Til den offentlige HTTP-anmodning nedenfor kan en uautentificeret kandidat fra HTTP-proxylisten erstatte adressen, hvis offentlige mellemled er tilladt:
endpoint = TCP4ClientEndpoint(reactor, 'proxy.example', 8080,
timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)
For et lille svar, som du vil samle i hukommelsen, skal du inkludere læsning af kroppen i Deferred-kæden, før du tilføjer 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()))
Uddraget forudsætter, at programmet allerede har sin reactor og konfigurerede agent. ProxyAgents anmodnings-Deferred giver et svarobjekt; readBody returnerer Deferred for kroppen. Returnerer du det fra callbacket, venter kæden også på den operation.
Placeringen betyder noget. Twisted anvender addTimeout på det arbejde, som callbacks installeret før den repræsenterer. At tilføje en kropslæser bagefter ville beskrive en anden grænse. I denne opstilling starter timeren, når addTimeout kaldes, og dækker den ventende anmodning og kropsarbejdet i den kæde.
Brug en streamingforbruger til store eller ubegrænsede kroppe, og repræsentér dens afslutning på samme måde. En frist på klientsiden begrænser, hvor længe dit program venter; den omkonfigurerer ikke proxyens egen opstrøms forbindelsestimeout.